javascript - angular2 检测 ng-content 的变化

标签 javascript angular

有没有办法检测 ng-content 的变化?

@Component({
    selector: 'example',
    template: `<ng-content></ng-content>`
})
export class Example {}

@Component({
    selector: 'test',
    template: `
        <example>
            <div *ngFor="let el of elements">{{el}}</div>
        </example>`
})
export class Test {
    elements = [1, 2, 3];

    ngOnInit() {
        setInterval(() => this.elements[0] += 10, 3000);
    }
}

当我的 ng-content 发生变化时,我想在 Example 类中获得一些信息。

这里是 plunker

最佳答案

最简单的解决方案是使用 cdkObserveContent指示。 首先,您必须添加到拥有组件 ObserversModule 的模块的导入

import {ObserversModule} from '@angular/cdk/observers';

@NgModule({
  imports: [
    /* ...other modules you use... */
    ObserversModule
  ],

/* ... */
})
export class MyModule { }

然后在你的组件模板中:

<div (cdkObserveContent)="onContentChange($event)">
  <ng-content></ng-content>
</div>

每当内部内容以某种方式发生变化时,事件就会触发,传递给函数的值是一个数组,其中包含有关更改内容的所有详细信息。已更改数据的值可以在target.data中找到.

在你的 component.ts 中:

onContentChange(changes: MutationRecord[]) {
   // logs everything that changed
   changes.forEach(change => console.log(change.target.data));
}

此外,您还可以使用为您提供 Observable<MutationRecord[]> 的服务

关于javascript - angular2 检测 ng-content 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306357/

相关文章:

javascript - 获取客户端 PC 计算机名称或 MAC 地址

javascript - 更新 Chrome 扩展中的选项卡并等待它打开以打开另一个下载链接。如何等到 url 在选项卡中打开?

angular - 我无法使用 http-server 访问页面

javascript - JavaScript 'while'循环导致浏览器崩溃

javascript - 在 D3 v5 中以编程方式停止 dragmove 事件

javascript - 如何将 AngularJS 中的对象推到元素正下方

angular - typescript 错误 : Type 'any' is not a constructor function type

angular - 我们需要使用 webpack 和 typescript/angular2 进行 tree-shaking 吗?

javascript - Angular:无法使用 'require' 关键字

angular - 在 Angular2 中订阅 router.events.subscribe 时如何从 Route 或 ActivatedRoute 获取数据?