angular – 如何检测ng-content的异步更改

前端之家收集整理的这篇文章主要介绍了angular – 如何检测ng-content的异步更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个使用标记包来呈现markdown内容的组件,当异步事件更改其ng-content元素时,它不会重新呈现自身.

这是代码

import {Component,ElementRef,AfterContentInit} from 'angular2/core';
declare var marked: any;

@Component({
    selector: 'markdown',template:
    '<div style="display:none;">' +
    '    <ng-content></ng-content>' +
    '</div>' +
    '<div class="markdown" [innerHTML]="output"></div>'
})
export class MarkdownComponent implements AfterContentInit {
    output: string;

    constructor(
        private element: ElementRef) {
    }

    ngAfterContentInit() {
        const c = this.element.nativeElement.childNodes;
        this.output = marked(c[0].textContent);
    }
}

这是HTML片段:

<markdown>{{info}}</markdown>

这是异步更新:

updateInfo(text: string) {
    this.svc.update(this.info,text).subscribe(
        data => this.info = data.newText);
}

问题是,当this.svc.update事件触发时,info变量会更改值,但markdown组件不会重新呈现.

谢谢!

解析度

按照接受的答案的建议(感谢Gunter),这是新组件,它更精简,更简单:

import {Component} from 'angular2/core';
declare var marked: any;

@Component({
    selector: 'markdown',template: '<div class="markdown" [innerHTML]="process(md)"></div>',inputs: ['md']
})
export class MarkdownComponent {
    md: string;

    process(s: string) {
        if (!s) return '';
        return marked(s);
    }
}

这是新的HTML:

<markdown [md]="info"></markdown>

完美的工作! 原文链接:https://www.f2er.com/angularjs/143263.html

猜你在找的Angularjs相关文章