加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 07:50:02 所属栏目:安全 来源:网络整理
导读:我创建了一个使用标记包来呈现markdown内容的组件,当异步事件更改其ng-content元素时,它不会重新呈现自身. 这是代码 import {Component,ElementRef,AfterContentInit} from 'angular2/core';declare var marked: any;@Component({ selector: 'markdown',temp
我创建了一个使用标记包来呈现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>

完美的工作!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读