1.父子间组件传递------重点&难点

Vue.js和Angular中的父子间消息传递原理一样,都可以用口诀:

“Props Down,Events Up”

方向1:父 =>子

父组件通过“子组件的自定义属性”向下传递数据给子组件

1.Parent.ts: 父组件创建数据

userName ='苍茫大地'

2.Parent.html: 父组件将自己的数据绑定给子组件的属性

<child2  [child2Name]='userName'></child2>

3.Child2.ts: 子组件定义扩展属性

@Input()           //声明为 "输入型属性"

private  child2Name:string = null

4.Child2.html : 子组件使用自定义属性

<p>{{child2Name}}</p>

方向2:子 =>父

子组件通过触发特定的事件(其中携带着数据),把数据传递给父组件(父组件提供事件处理方法)

1.Child1.ts:自定义事件发射器 ------- 输出型属性

@Output( )

private   cryEvent  =new EventEmitter()

2.Child1.ts:在某个时刻发射事件

this.cryEvent.emit( 子组件向传给父组件的数据 )

-----------------------------------------------------------------

3.Parent.html:监听子组件的事件

<child1  (cryEvent)="doCry($event)"></child1>

4.Parent.ts:接收子组件传递的数据

doCry( e ){   e就是子组件传递过来的数据   }

父子组件传递数据的简便方法:父亲直接使用子组件的引用  ------视图子组件

Parent.html:使用#为子组件声明识别符

<div  #c1></div>

<myc02  #c2></myc02>

Parent.ts:

@ViewChild('c1',{static:true})

private   child1;

 @ViewChild('c2',{static:true})

private  child2;

提示:ViewChild装饰器用于将子组件识别符与某个属性关联起来,第一个参数必须

是已经存在的子组件识别符(不带#),第二个参数static指定该组件是否为"静态组件"----

不会有时有有时无的组件。

注意:通过“ViewChild-视图子组件”方式父组件可以获得任一子组件中的任意数据----

一定程度上违反了"最少知识法则"

2.总结:组件的模板中可以出现的内容

<div id="d">

<myc01 #c01></myc01>

<p  *ngIf="isMarried"></p>

<li  *ngFor="let  emp of empList;let  i=index">{{emp}}</li>

<button (click)="doClick($event)"></button>

<div   #myDiv></div>

</div>

1.HTML标准元素/属性

2.组件对应的元素

3.Angular指令------如ngIf、ngFor

4.模型数据/方法------Model,如empList

5.事件对象/子组件传递的数据-------$event

6.模板变量-------在模板中声明的临时变量,如ngFor循环产生的emp、index等

7.NG元素识别符--------都是以#开头,在脚本中使用ViewChild进行关联

3.路由和导航

多页面应用:一个项目中有多个完整HTML文件,使用超链接跳转-----销毁一颗DOM树,同步

请求另一颗,得到之后再重建新的DOM树。

不足:DOM树要反复重建,间隔中客户端一片空白

单页面应用:称为SPA(Single Page Application)整个项目中有且只有一个“完整的”HTML文件,

其他的“页面”都只是DIV片段。需要哪个“页面”就将其异步请求下来,“插入”到“完整的”

HTML文件中。

单页面应用的优势:整个项目中客户端只需要下载一个HTML页面,创建一个完整的DOM树,页面跳转

都是一个DIV替换另一个DIV而已-------能够实现过场动画。

单页应用的不足:不利于SEO访问优化

route:路径、路线、路由,有两部分:目标地址+处理过程

router:路由器,内部包含着路由字典

Angualr中使用“单页应用”的步骤:

(0)创建整个应用需要的路由组件

ng    g  component  index

ng    g  component  product-list

ng    g  component  product-detail

ng    g  component  user-center

1.定义“路由字典”--------[{URL-组件},{URL-组件}]

//app.module.ts     为每个路由组件分配一个路由地址

let routes ={

{path:'index',component:IndexComponent},

....

{path:'ucenter',component:UserCenterComponent}

}

2.注册“路由字典”

//app.module.ts

imports:[ BrowserModule,RouterModule.forRoot(routes)]

3.创建路由挂载点-------称为“路由出口”

//app.component.html

<router-outlet></router-outlet>

4.访问测试

http://127.0.0.1:4200/ucenter

注意:

1.路由字典中的路由地址不能以/开头或结尾,但中间可以包含/

2.路由字典中可以指定一个默认首页地址:{ path:"",component:.... }

3.路由词典中每个路由中要么指定component,要么指定redirectTo(重定向到另一个路由地址)

4.路由词典中可以指定一个匹配任意地址的地址:'**',注意该地址只能用于整个路由词典中的最后一个!

面试题:Vue.js中的路由跳转的机制有哪些?

1.hash法:只需要修改url中的hash部分

http://127.0.0.1/index.html#/ucenter

2.history法:需要修改window.history对象,从而支持浏览器自带的后退按钮

http://127.0.0.1/ucenter

面试题:Vue.js中的路由跳转的机制有哪些?

1.history法:需要修改window.history对象,从而支持浏览器自带的后退按钮

http://127.0.0.1/ucenter

路由跳转/导航:从一个路由地址跳转到另一个

实现方案:

方式1:使用模板跳转方法

<any routerLink="/ucenter"></any>

注意:1.可用于任意标签上   2.跳转地址应该以/开头,防止以相对方式跳转

方式2:使用脚本跳转方法

        constructor(private router:Router){}     //声明依赖

...

this.router.navigateByUrl('/ucenter')     //执行跳转

注意:Router类是RouterModule提供方的一个服务类,声明依赖即可使用。

5.路由参数

在路由词典中定义路由地址时,其中可以包含可变的参数:

{path:'product/detail/:lid',component....}

在路由跳转时可以为路由参数提供具体的参数值:

<a  routerLink='/product/detail/5'>

<a  routerLink='/product/detail/13'>

到了目标路由组件,可以读取“当前路由地址”中的路由参数:

constructor(private route:ActivatedRoute){}

ngOnInit(){

//读取路由参数

this.route.params.subscribe( (data)=>{ data.lid 就是路由参数 } )

}

Aangular 父子间组件传递的更多相关文章

  1. vue 父子间组件传值

    1.父组件向子组件传值: 实例截图: 实例代码: /*子组件代码*/ //child.vue <template> <div style="border: 1px soli ...

  2. 微信小程序自定义组件封装及父子间组件传值

    首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议 wxzx-xxx 命名 官网地址:https://developers.weixin.qq.com/miniprogra ...

  3. vue 组件间数据传递

    父组件向子组件传值 方法一: 子组件想要使用父组件的数据,需要通过子组件的 props 选项来获得父组件传过来的数据. 1.父组件parent.vue中代码: <template> < ...

  4. Vue2.0组件间数据传递

    Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有 ...

  5. iframe兄弟间和iframe父子间的值传递问题

    在网上查了资料.iframe的参数传递问题.有很多答案都是不可行的.现在将收集的资料整理一下.已经验证通过.以下如有问题请及时指正. 1. iframe兄弟之间值传递 举例说明:index页面中有两个 ...

  6. 开始使用 Vuejs 2.0 --- 组件间数据传递

    Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有 ...

  7. vue组件父子间通信之综合练习--假的聊天室

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. vue 父子组件传递数据

    单向数据流: 数据从父级组件传递给子组件,只能单向绑定. 子组件内部不能直接修改从父级传递过来的数据. 解决方法: 可以使用data将父组件传递过来的数据拷贝一份存放起来,再修改拷贝的数据就可以了 / ...

  9. vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)

    看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...

随机推荐

  1. PHP中级篇 Apache配置httpd-vhosts虚拟主机总结及注意事项

    经常使用Apache虚拟主机进行开发和测试,但每次需要配置虚拟主机时都习惯性的ctrl+c和ctrl+v,这次由于重装系统,需要配置一个新的PHP开发环境虚拟主机,于是总结一下Apaceh配置http ...

  2. memcache---mongodb---redis比较

    Memcached的优点: Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右). ...

  3. python学习10字典

    '''''''''字典(Dict)是python语言的一个最大的特征1.定义:是可变的无序集合,以键值对为基本元素,可以存储各种数据类型2.表示:{} 列表:[] 元组 () 字符串 ‘’ “” ‘‘ ...

  4. ELK6.3版本安装部署

    一.Elasticsearch 安装 1.部署系统以及环境准备 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) uname - ...

  5. 加分二叉树 vijos1991 NOIP2003第三题 区间DP/树形DP/记忆化搜索

    描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一 ...

  6. USACO Training Section 1.1黑色星期五Friday the Thirteenth

    题目描述 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+N- ...

  7. 网络流--最大流--HDU 3549 Flow Problem

    题目链接 Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, y ...

  8. 慎用ToLower和ToUpper,小心把你的系统给拖垮了

    不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一: ...

  9. CentOS安装jsoncpp

    两种安装方式: 通过cmake安装 通过scons安装 cmake安装见cmake安装jsoncpp,scons安装见下文. 1. 安装scons .tar.gz export MYSCONS=/ro ...

  10. Java常见的集合的数据结构

    数据结构 数据结构__栈:先进后出 栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加.查找.删除等操作. 简单的说:采用该结构的 ...