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

2019-07-17  本文已影响0人  salt_fash

组件通讯

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

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

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

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

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

@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 {
  }
}

点击前
点击后
上一篇下一篇

猜你喜欢

热点阅读