[Angular学习笔记]Angular组件通讯

组件通讯

前端框架,例如extjs,vue,angular等,都是或趋于组件化,所以组件间的通讯,是一个亟需解决的问题

一般而且言,这些组件之间都会形成这种树形结构

组件之间会有下列3种关系:

  • 父子关系

  • 兄弟关系

  • 没有直接关系

本文这要介绍一下几种通讯方式:

  • @Input(父传子)
  • @Output(子传父)

目前先写这两种方式,其他方式等我再学几天在写

@Input->父对子传值

@Input为一个装饰器,用来把某个类字段标记为输入属性,并提供配置元数据。 该输入属性会绑定到模板中的某个 DOM 属性。当变更检测时,Angular 会自动使用这个 DOM 属性的值来更新此数据属性。
使用方法也很简单,但是前提需要先从@angular/core引入

import { Input } from '@angular/core';

然后就可以愉快的使用了

@Input() prentData;

放上完整代码:
父组件:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <p>我是父组件</p>
    <app-child [prentData]="testData"></app-child>
  `,
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'test';
  testData: number;
  ngOnInit(): void {
    this.testData = 1;
  }
}

子组件:

import { Component, OnInit, Input } from '@angular/core';

@Component({
  selector: 'app-child',
  template: `
    <p>我是子组件</p>
    <p>父组件传过来的值:{{ prentData }}</p>
  `,
  styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {
  @Input() prentData;
  constructor() { }

  ngOnInit() {
  }
}
运行效果

@Output ->子对夫传值

没有错,@Output也是一个装饰器,也要先进行引入再使用

import { Output } from '@angular/core';

还需要引入一个EventEmitter这玩意,咱也不知道这是啥,咱也不敢问

import { EventEmitter } from '@angular/core';

啥也不说了,直接上代码吧

  • 子组件
import { Component, OnInit, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'app-child',
  template: `
    <p>我是子组件</p>
    <button (click)="childClick()">点我向父组件传值</button>
  `,
  styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {
  @Output() childData = new EventEmitter<string>();//将字段标记为输出类型
  childClick() {//监听事件,并通知父组件
    this.childData.emit('我是子组件传过来的值');
  }
  ngOnInit() {
  }

}

  • 父组件
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <p>我是父组件</p>
    <p>{{ testData }}</p>
    <app-child (childData)="childClick($event)" ></app-child><!--监听事件,并绑定处理方法childClick()-->
  `,
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'test';
  testData: string;
  //处理事件,并将子组件传过来的值赋值给testData变量
  childClick(childData: string) {
    this.testData = childData;
  }
  ngOnInit(): void {
  }
}

点击前

点击后
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.课程简介 (注意:这里的AngularJS指的是2.0以下的版本) AngularJS的优点: 模板功能强大丰...
    壹点微尘阅读 4,455评论 0 0
  • 组件基础 组件用来包装特定的功能,应用程序的有序运行依赖于组件之间的协同工作。组件是angular应用的最小逻辑单...
    oWSQo阅读 5,189评论 0 0
  • 一、搭建Angular开发环境 安装nodejs, Angular Cli, WebStorm 先安装nodejs...
    lzb30阅读 3,666评论 0 1
  • 学习资料来自 Angular.cn 与 Angular.io。 模板语法 在线例子 在 Angular 中,组件扮...
    小镭Ra阅读 9,217评论 0 3
  • Angular 2架构总览 - 简书http://www.jianshu.com/p/aeb11061b82c A...
    葡萄喃喃呓语阅读 5,342评论 2 13