Aangular 父子间组件传递
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 父子间组件传递的更多相关文章
- vue 父子间组件传值
1.父组件向子组件传值: 实例截图: 实例代码: /*子组件代码*/ //child.vue <template> <div style="border: 1px soli ...
- 微信小程序自定义组件封装及父子间组件传值
首先在我们可以直接写到需要的 page 中,然后再进行抽取组件,自定义组件建议 wxzx-xxx 命名 官网地址:https://developers.weixin.qq.com/miniprogra ...
- vue 组件间数据传递
父组件向子组件传值 方法一: 子组件想要使用父组件的数据,需要通过子组件的 props 选项来获得父组件传过来的数据. 1.父组件parent.vue中代码: <template> < ...
- Vue2.0组件间数据传递
Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有 ...
- iframe兄弟间和iframe父子间的值传递问题
在网上查了资料.iframe的参数传递问题.有很多答案都是不可行的.现在将收集的资料整理一下.已经验证通过.以下如有问题请及时指正. 1. iframe兄弟之间值传递 举例说明:index页面中有两个 ...
- 开始使用 Vuejs 2.0 --- 组件间数据传递
Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有 ...
- vue组件父子间通信之综合练习--假的聊天室
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- vue 父子组件传递数据
单向数据流: 数据从父级组件传递给子组件,只能单向绑定. 子组件内部不能直接修改从父级传递过来的数据. 解决方法: 可以使用data将父组件传递过来的数据拷贝一份存放起来,再修改拷贝的数据就可以了 / ...
- vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)
看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...
随机推荐
- swoole--服务平滑重启
参考来源:https://wiki.swoole.com/wiki/page/p-server/reload.html shell代码: echo "loading..." pid ...
- centos7.4挂载硬盘
场景:新网上买了台服务器,有个数据盘需要自己挂载 fdisk -l 能看见有一个85.9g的硬盘 然后mkfs -t ext4 /dev/sdb 格式化硬盘 mkdir /data新建data文件夹用 ...
- material UI中withStyles和makeStyles的区别
在material UI中,withStyles和makeStyles是经常使用的两个用于封装样式的函数.对于刚使用material UI的开发者而言,可能不太清楚这两者的区别. 本文简要探究 ...
- ES6的let和const命令(一)
2019独角兽企业重金招聘Python工程师标准>>> ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变 量,只在let命令所在的代码块内有效. let ...
- WeChatSampleBuilder V2.0 使用教程(网页版+桌面版)
为了方便开发者可以快速搭建一个最小化所需模块的 Senparc.Weixin SDK Sample 项目,我们于 2018 年 11 月发布了首个 WeChatSampleBuilder 的版本,受到 ...
- inotify-tools的inotifywait工具用exclude 和 fromfile 排除指定后缀文件
今天打算使用 inotify-tool 来对线上程序文件进行监控, 因为有些目录是缓存目录, 所以要进行排除, 同时还要排除一些指定的后缀的文件, 比如 .swp 等 需要递归监控的目录为: /tmp ...
- vue中给window添加滚动监听无效的解决方案
原文链接: 点我 页面中有这么一个需求,当页面滚动到一定高度之后,页面中的某些元素进行吸顶,固定到顶部位置,或者是滚动到一定程度进行更新数据的操作.我相信不少网友查阅过类似的资料,网友给出的解决方案, ...
- Codeforce-Ozon Tech Challenge 2020-C. Kuroni and Impossible Calculation(鸽笼原理)
To become the king of Codeforces, Kuroni has to solve the following problem. He is given n numbers a ...
- 疯子的算法总结10--最小生成树Kruscal
按照权值排序可得,就有如下顺序: 1. 1-2 1 2. 1-4 2 3. 1-5 2 4. 2-5 3 5. 2-3 4 6. 4-5 4 每次选取最小边泉,判断是否同属一个集合,如果不属于同一集合 ...
- tinymce富文本编辑器整合到django
第一步:定义表存图片路径 models.py class AdminIMG(models.Model): filename = models.CharField(max_length=200, ...