2016-11-03 85 views
3

我試圖在Angular2應用程序內添加一個Youtube Iframe。如果我把網址中的iFrame一切工作正常:Youtube Iframe on Angular2

<iframe width="560" height="315" src="http://www.youtube.com/embed/wzrnuUOoFNM" frameborder="0" allowfullscreen></iframe> 

但是,如果我嘗試從服務器獲取網址,以在組件中的OnInit方法,像這樣的訂閱,

<iframe width="560" height="315" src="http://www.youtube.com/embed/{{video.id}}" frameborder="0" allowfullscreen></iframe> 

不顯示視頻和控制檯顯示此錯誤:

Uncaught TypeError: Cannot set property stack of [object Object] which has only a getter 

我認爲這是與應用程序的時間從服務器取數據有關。當頁面加載時,沒有{{video.id}},因爲尚未準備好,但是當由於任何原因準備就緒時,iframe不會更新。

任何想法來解決這個問題?

+0

嗨喬爾,感謝您的回覆。我已經覆蓋了iframe。 – jos

回答

7

您可以使用DomSanitizer來傳遞Angular的內置消毒功能。

import {Component} from '@angular/core'; 
import {DomSanitizer} from '@angular/platform-browser'; 

@Component({ 
    selector: 'my-app', 
    template: `  
    <iframe width="560" height="315" [src]="url" frameborder="0" allowfullscreen></iframe> 
    `, 
}) 
export class App { 
    name:string; 
    video: any = {id: 'wzrnuUOoFNM'}; 
    baseUrl:string = 'https://www.youtube.com/embed/'; 
    constructor(private sanitizer: DomSanitizer) { 
    this.url = this.sanitizer.bypassSecurityTrustResourceUrl(this.baseUrl + this.video.id);  
    } 
} 
+0

謝謝!奇蹟般有效!。我想說,當我從服務器收到數據時,即在訂閱時,我會進行清理。 – jos

+0

會很高興知道該代碼的位置 –

+0

@TIIUNDER這是一個完整的組件代碼,將代碼放置在組件中,我不明白你的問題。 – Kld