Часть DOM постоянно обновляется в Angular 5. При попытке извлечь видео из YouTube API
Вызов API YouTube в
ngOnInit(){
var finalURL = "https://www.googleapis.com/youtube/v3/search?key="+this.api+"&channelId="+this.chanId+"&part=snippet,id&order=date&maxResults="+this.result+""
console.log(finalURL);
this.obser$ = this.http.get(finalURL).subscribe(response=>{
console.log(response);
let ytresults= response.json();
console.log(ytresults);
ytresults.items.forEach(obj => {
console.log(obj.id.videoId);
this.ytvideolist.push(obj.id.videoId);
});
console.log(this.ytvideolist);
}
пытаясь здесь сделать URL-адрес видео санированный
<li *ngFor= "let id of ytvideolist">
<iframe [src]="getEmbedUrl(id)" frameborder="0" allowfullscreen></iframe>
</li>
Использование DOM sanitizer в функции getEmbedUrl(id)
getEmbedUrl(id){
console.log(id);
return this.sanitizer.bypassSecurityTrustResourceUrl('https://youtube.com/embed/'+id);
}
Все работает отлично, видео загружается, но часть DOM постоянно обновляется. Я пытался сделать отписку на всех компонентах жизненного цикла хуков. Но если я откажусь от подписки, я не получу только результаты. Есть ли другие обходные пути или я что-то здесь упускаю!
1 ответ
Решение
Решил проблему с помощью трубы
import { Pipe, PipeTransform } from '@angular/core';
import {DomSanitizer, SafeResourceUrl} from "@angular/platform-browser";
@Pipe({
name: 'youtubeSafeUrl'
})
export class YoutubePipe implements PipeTransform {
constructor(private sanitizer: DomSanitizer){
}
transform(videoId: string): SafeResourceUrl {
return this.sanitizer.bypassSecurityTrustResourceUrl(
`https://www.youtube.com/embed/${videoId}`);
}
}
Внутри HTML сделал что-то вроде этого
<div *ngFor= "let videoId of ytvideolist" class="shadow1">
<iframe [src]="videoId | youtubeSafeUrl" frameborder="0" allowfullscreen></iframe>
</div>
Я угадал проблему с подпиской. так или иначе это решено! Надеюсь, это кому-нибудь поможет.