繁体   English   中英

Angular 2从父级更新子级组件的类列表

[英]Angular 2 update child component's class list from parent

我是Angular 2的新手,在以下问题上我需要一些帮助。 我有一个父级和一个嵌套的子级组件:

// The Parent:
import { Component, ViewChild } from 'angular2/core';
import {Preloader} from 'components/preloader/preloader';


@Component({
  selector: 'console',
  providers: [Preloader],
  directives: [Preloader],
  templateUrl: 'components/console/console.html'
})


export class Console {
  @ViewChild(Preloader) preloader: Preloader;

  constructor(preloader: Preloader) {
    this.preloader = preloader;
  }

  ngAfterViewInit() {
    this.preloader.showConsole();
  }
}


// ...and the Child
import {Component} from 'angular2/core';


@Component({
  selector: 'preloader',
  template: `
    <div [ngClass]="style"></div>
  `
})


export class Preloader {
  constructor() {
    this.style = {
      fullscreen: true,
      done: false
    };
  }

  showConsole() {
    // this is not working:
    this.style.done = true;
  }
}

当父组件完全装入时,我想将style对象中的两个变量都设置为true 确实发生了这种情况,但是在Preloader的模板中,即使调用showConsole方法并将style.done设置为true我也只能看到fullscreen类。

console.html模板如下所示:

<div class="main-window">
  <preloader></preloader>
</div>

我刚刚测试过,您的解决方案可以正常工作。

但是,如果您仍然说fullscreen课程保持不变,则可以考虑以下解决方案,

ngAfterViewInit() {
    setTimeout(()=>{
        this.preloader.showConsole();
    },0)        
 }

showConsole() {
    this.style.fullscreen = false;   //<<<===added.
    this.style.done = true;
 }

我知道了! 问题出在两个组件之间的通信中。 首先,这是我应该如何传递模板中的数据:

<div class="main-window">
  <preloader [start]='showConsole'></preloader>
</div>

但是,最重要的是,它还需要在子@Component中指定输入变量,如下所示:

@Component({
  inputs:   ['start'],
  selector: 'preloader',
  template: `<div [ngClass]="style"></div>`
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM