angular5 组件通信(一)
用了两年angular1,对1的组件通信比较熟练,最直接的就是直接使用scope的父子节点scope就可以实现,且基本都是基于作用域实现的通信;还有就是emit,broadcast,on这几个东西了。但是到了angular2,就不再有作用域这个概念了,那么,angular2以后,组件的通信是什么样的呢?
主要是父子组件的通信,angular5使用的是@Input来实现父传子,通过@Output和EventEmitter来实现子传父。由此可见其单向数据绑定思想,对于提升效率有很大作用。而父子互传,则又相当于1的双向数据绑定。
上代码解析:
// child-component.ts
import { OnInit, Component, Input } from '@angular/core'; @Component({
selector: 'child-component',
...
})
export class ChildComponent implements OnInit {
@Input
count: number = 0; ngOnInit() {
console.log(this.count); // 父组件内传入的值或者我们自己设置的初始值0
} increaseNumber() {
this.count ++;
} descreaseNumber() {
this.count --;
}
}
// father-component.ts
import { Component } from '@angular/core';
import { ChildComponent } from '../child-component/child-component'; @Component({
template: `
<child-component [count]='initialCount'></child-component>
`,
...
})
export class FatherComponent {
initialCount: number = 5;
}
至此则实现了父传[count]='initialCount'到子的通信。
我们给父组件增加一个事件接收子组件发来的消息,并且在子组件需要发送的地方进行发送。
// father-component.ts
import { Component } from '@angular/core';
import { ChildComponent } from '../child-component/child-component'; @Component({
template: `
<child-component [count]='initialCount' (change)="countChange($event)"></child-component>
`,
...
})
export class FatherComponent {
initialCount: number = 5; countChange($event) { }
}
// child-component.ts
import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({
selector: 'child-component',
...
})
export class ChildComponent {
@Input
count: number = 0; @Output
change = new EventEmitter(); increaseNumber() {
this.count ++;
this.change.emit(this.count);
} descreaseNumber() {
this.count --;
this.change.emit(this.count);
}
}
至此实现父子双向通信。
而在angular中,双向绑定有独特的写法,即[()],如上边的child-component就可以写作
<child-component [(count)]='initialCount'></child-component>
即:双向数据绑定 = 单向数据绑定 + 事件 的思想。
<input type='text' name='userName' [(ngModel)]="userName">
等价于
<input type='text' name='userName' [ngModel]="userName" (ngModelChange)="userName=$event">
除此之外,还有通过service,消息定义subscribe,父子互相获取实例这几种方法来实现。见
https://www.cnblogs.com/huangenai/p/7246651.html
https://blog.csdn.net/qq_15096707/article/details/52859110
angular5 组件通信(一)的更多相关文章
- 关于React的父子组件通信等等
//==================================================此处为父子组件通信 1.子组件调用父组件: 父组件将子组件需要调用方法存入props属性内,子组 ...
- Angular2 组件通信
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- vue.js入门(3)——组件通信
5.2 组件通信 尽管子组件可以用this.$parent访问它的父组件及其父链上任意的实例,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用 props 传递数据.另外,在子组件中修改父组件的 ...
- Intent进行组件通信的一些体会
Intent进行组件通信的原理 l Intent协助应用间的交互与通讯 Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述.Android则根据此Intent的描述,负责找到对应 ...
- 进程外组件通信之免注册com通信【原创】
最近在搞进程外组件通信的东西,写了个demo,免注册的,一直没调通,其实就是两个问题卡了好几天,也没找到有用的资料,试了好几天终于才解决,现简单记录下来,免得大家跟我走一样的弯路.下面com端程序名称 ...
- vue2.0 组件通信
组件通信: 子组件要想拿到父组件数据 props 子组件不允许直接给父级的数据, 赋值操作如果想更改,父组件每次穿一个对象给子组件, 对象之间引用. 例子: <script> window ...
- React之组件通信
组件通信无外乎,下面这三种父子组件,子父组件,平行组件(也叫兄弟组件)间的数据传输.下面我们来分别说一下: 父子组件: var Demo=React.createClass({ getInitialS ...
- Vue 非父子组件通信
组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求.组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信.前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有 ...
- vue子父组件通信
之前在用vue写子父组件通信的时候,老是遇到问题!!! 子组件传值给父组件: 子组件:通过emit方法给父组件传值,这里的upparent是父组件要定义的方法 模板: <div v-on:cli ...
随机推荐
- sqlserver 操作数据表语句模板
从网上搜的,一点一点加吧. -----------设置事务全部回滚----------------- SET XACT_ABORT ON BEGIN BEGIN TRY BEGIN TRANSACTI ...
- ASP.NET MVC 学习笔记-2.Razor语法
1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“:”结尾.代码块中定义的变量可能会被同一个域中的其他块使用. ...
- 程序猿制造Bug的根本原因竟然是....
传说中: 「杀一个程序猿不需要用枪,改三次需求就可以了.」 而且, 「这竟然也是程序猿制造Bug的根本原因....」 ↓↓↓↓↓↓↓ #/原始需求/# 你去饭店,坐下来. “服务员,给我来份宫保鸡 ...
- Redis 私有云平台 CacheCloud
redis-cachecloud https://github.com/sohutv/cachecloud/wiki/3.%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E6 ...
- nginx配置虚拟机
在/usr/local/nginx/conf目录下nginx.conf文件是nginx的配置文件. 一.通过端口号区分虚拟机 在nginx.conf文件中添加一个Service节点,修改端口号: se ...
- Android Studio 学习(六)内容提供器
运行时权限 使用ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CALL_PHONE)!=Package ...
- js 策略模式 实现表单验证
策略模式 简单点说就是:实现目标的方式有很多种,你可以根据自己身情况选一个方法来实现目标. 所以至少有2个对象 . 一个是策略类,一个是环境类(上下文). 然后自己就可以根据上下文选择不同的策略来执 ...
- favicon.ico在chrome里显示正常,在ie,edge浏览器中不显示
代码: <head> <meta charset="UTF-8"> <link href="imgs/favicon.ico" r ...
- javaScript 设计模式之中介者模式示例
飞机把注册信息放到铁塔里,发送数据到铁塔,报告其它的飞机一些信息. var feiji = function( name ){ this.name = name; } feiji.prototype. ...
- mysql之代码执行结构
本文内容: 什么是代码执行结构 顺序结构 分支结构 循环结构 首发日期:2018-04-18 什么是代码执行结构: 这里所说的代码执行结构就是多条sql语句的执行顺序. 代码执行结构主要用于触发器.存 ...