美文网首页
angular 组件通信

angular 组件通信

作者: 牛马风情 | 来源:发表于2017-04-18 15:27 被阅读0次

    原文链接 https://segmentfault.com/a/1190000008959575#articleHeader0

    输入属性 (父组件 -> 子组件)


    counter.component.ts

    import { Component, Input } from '@angular/core';
    
    @Component({
        selector: 'exe-counter',
        template: `
          <p>当前值: {{ count }}</p>
          <button (click)="increment()"> + </button>
          <button (click)="decrement()"> - </button>
        `
    })
    export class CounterComponent {
        @Input() count: number = 0;
    
        increment() {
            this.count++;
        }
    
        decrement() {
            this.count--;
        }
    }
    

    app.component.ts

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'exe-app',
      template: `
       <exe-counter [count]="initialCount"></exe-counter>
      `
    })
    export class AppComponent {
      initialCount: number = 5;
    }
    

    输出属性 (子组件 -> 父组件)


    counter.component.ts

    import { Component, Input, Output, EventEmitter } from '@angular/core';
    
    @Component({
        selector: 'exe-counter',
        template: `
          <p>当前值: {{ count }}</p>
          <button (click)="increment()"> + </button>
          <button (click)="decrement()"> - </button>
        `
    })
    export class CounterComponent {
        @Input() count: number = 0;
    
        @Output() change: EventEmitter<number> = new EventEmitter<number>();
    
        increment() {
            this.count++;
            this.change.emit(this.count);
        }
    
        decrement() {
            this.count--;
            this.change.emit(this.count);
        }
    }
    

    app.component.ts

    import { Component } from '@angular/core';
    
    @Component({
      selector: 'exe-app',
      template: `
       <p>{{changeMsg}}</p> 
       <exe-counter [count]="initialCount" 
        (change)="countChange($event)"></exe-counter>
      `
    })
    export class AppComponent {
      initialCount: number = 5;
    
      changeMsg: string;
    
      countChange(event: number) {
        this.changeMsg = `子组件change事件已触发,当前值是: ${event}`;
      }
    }
    

    模板变量


    child.component.ts

    import {Component} from '@angular/core';
    
    @Component({
      selector: 'child-component',
      template: `I'm {{ name }}`
    })
    
    export class ChildComponent {
      public name: string;
    }
    

    parent.component.ts

    import {Component, OnInit} from '@angular/core';
    import {ChildComponent} from './child-component.ts';
    
    @Component({
      selector: 'parent-component',
      template: `
        <child-component #child></child-component>
        <button (click)="child.name = childName">设置子组件名称</button>
      `
    })
    
    export class ParentComponent implements OnInit {
      
      private childName: string;
      
      constructor() { }
    
      ngOnInit() { 
        this.childName = 'child-component';
      }
    }
    

    @ViewChild 装饰器


    child.component.ts

    import { Component, OnInit } from '@angular/core';
    
    @Component({
        selector: 'exe-child',
        template: `
          <p>Child Component</p>  
        `
    })
    export class ChildComponent {
        name: string = '';
    }
    

    app.component.ts

    import { Component, ViewChild, AfterViewInit } from '@angular/core';
    import { ChildComponent } from './child.component';
    
    @Component({
      selector: 'my-app',
      template: `
        <h4>Welcome to Angular World</h4>
        <exe-child></exe-child>
      `,
    })
    export class AppComponent {
    
      @ViewChild(ChildComponent)
      childCmp: ChildComponent;
    
      ngAfterViewInit() {
        this.childCmp.name = 'child-component';
      }
    }
    

    相关文章

      网友评论

          本文标题:angular 组件通信

          本文链接:https://www.haomeiwen.com/subject/owofzttx.html