簡體   English   中英

InnerHTML 中的 Angular 指令

[英]Angular directives inside InnerHTML

我知道不可能在內部 html 內的 html 代碼中注入 angular 指令,有什么解決辦法嗎? 我正在嘗試從 html 文件中讀取 html 和指令並將其注入到div ,我想過使用組件工廠並動態創建組件,但是 html 文件中的指令可以在代碼中的任何位置,不知道我是如何可以將它附加到 dom 中的正確位置,我在組件工廠方面沒有太多經驗,所以請告訴我是否有辦法。

ngOnInit(): void {

    let loading = this.loadingService.addTask();

    this.route.paramMap
        .take(1)
        .subscribe(params => {
            let page: string = params.get("page") || "";

            if (page) {
                this.trainingService.getPageContent(page)
                    .take(1)
                    .subscribe(res => {
                        this.content = res;
                        this.loadingService.completeTask(loading);
                    })
            }
            else {
                this.loadingService.completeTask(loading);
            }
        },
        error => {
            this.notificationService.error("Error retrieving training page", error);

            this.loadingService.clearAllTasks();
        })

這是我的模板

<div [innerHtml]="content"></div>

這是一個應該注入的 html 頁面示例(這是一個外部 html 頁面文件)

<div class="row">
    <div class="col-md-12">
        <div class="panel panel-default b">
            <div class="panel-body">
                <div class="row">
                    <!--the directive-->
                    <sa-azure-media-player [source]="the link"></ss-azure-media-player>
                </div>
            </div>
        </div>
    </div>
</div>

沒有辦法做到這一點。 解決方法是更改​​注入 html 的方式。 不要以 html 的形式注入,而是編寫一個子組件,為其提供正確的信息(作為 [json-] 對象!),然后就可以了。

如果您無法控制傳入的信息(在您的情況下為 html),您將被迫將其塑造成一個對象,以便您可以在 angular 中使用它。

在最近的一個項目中,我必須擁有可能包含 iframe 的文本內容(iframe 在 angular 中效果不佳)。 解決方案是將后端中的內容解析並保存為 JSON 對象,其中包含按正確順序的文本和 iframe 部分(不幸的是,這需要一些時間)。 一旦我在 Angular 中掌握了它,我就可以使用 typescript 注入 JSON 對象的文本和 iframe。 而且,當然,為正確的元素做正確的事情。

因此,如果您可以控制傳入的信息(無論是 html 還是任何類型的可識別對象),那么您應該更改程序(並充分利用 angular MVC 的東西)。 如果您對此沒有控制權,請提供更多關於需要做什么和具體情況的詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM