使用@Input

时间:2017-07-24 17:30:32

标签: angular components lifecycle ngonchanges

问题:为什么更改为父组件中未显示在子组件中的对象?

blah

当父组件中的对象显示在子组件中时,我很难检测到它们的更改值。

父组件模板具有用于增加值的按钮。

<div class="container root">
  <div class="row">
    <div class="col-md-12 col-xs-12">
      <h1>
       {{title}}
      </h1>
      <button (click)="funct1()" class="btn btn-success btn-lg">A ++</button>
      <button (click)="funct2()" class="btn btn-success btn-lg">B ++</button>
      <button (click)="funct3()" class="btn btn-success btn-lg">C ++</button>
      <button (click)="funct4()" class="btn btn-success btn-lg">D ++</button>
      <p *ngFor="let item of details"><strong>name:</strong> {{item.name}}, <strong>id:</strong> {{item.value}}</p>
    </div>
    <div class="row child">
      <div class="col-md-6 col-md-6">
        <app-child [data]="details">loading child component</app-child>
      </div>
    </div>
  </div>
</div>

app.component.ts文件,

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Root component!';
  value1: number = 0;
  value2: number = 0;
  value3: number = 0;
  value4: number = 0;
  details: {name: string, value:number}[]=[]

  arrayBuild(){
     this.details = [{name: 'A', value: this.value1}, {name: 'B', value: this.value2}, {name: 'C', value: this.value3}, {name: 'D', value: this.value4}];
  }
  funct1(){
    this.value1++;
    this.arrayBuild();
  }
  funct2(){
    this.value2++;
    this.arrayBuild();
  }
  funct3(){
    this.value3++;
    this.arrayBuild();
  }
  funct4(){
    this.value4++;
    this.arrayBuild();
  }
}

child.component.ts

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

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit, OnChanges {
  @Input() data: {name: string, value: number}[] = [];

  constructor() { }

  ngOnInit() {
  }

  ngOnChanges(){

  }
}

child.component.html

<div class="child">
  <h3>Child Component!</h3>
  <p *ngFor="let element of data"><strong>name:</strong> {{element.name}}, <strong>id:</strong> {{element.id}}</p>
</div>

我认为这与生命周期钩子有关,我只是模糊地熟悉它。

github here上的代码。 谢谢,

0 个答案:

没有答案