無法理解爲什麼數據不綁定在ui上,嘗試使用* ngFor綁定數組,但在數組存在於數組中時不顯示任何數據。這裏組件代碼:數據綁定不工作角2
import { Component, Injector, OnInit, OnDestroy, Pipe } from '@angular/core'
import { AdvancedPostsService } from '../../services/advanced.posts.service'
import { SpinnerService } from '../../services/spinner.service'
import { PathKey } from '../../helpers/platform.helpers'
import { Router } from '@angular/router'
import { ToolsService } from '../../services/tools.service'
import { YoutubeToolsService } from '../../services/youtube.tools.service'
@Pipe({ name: 'safe' })
@Component({
selector: 'advanced-post-youtube-step-component',
templateUrl: '../../templates/advanced-posts-templates/advanced.post.youtube.component.html'
})
export class AdvancedPostYoutubeStep implements OnInit, OnDestroy {
private postId: number;
private stepId: number;
private postType: number;
videoList: any[] = [];
private youTubeWatchUrl = "https://www.youtube.com/embed/";
i = 0;
constructor(private advancedPostsService: AdvancedPostsService,
private spinner: SpinnerService,
private toolsService: ToolsService,
private injector: Injector,
private router: Router,
private youtubeToolsService: YoutubeToolsService) {
this.injectParentData();
}
ngOnInit(): void {
this.youtubeToolsService.change.on(this.onYoutubeVideosLoaded.bind(this));
this.youtubeToolsService.initGoogleAuthentication();
this.spinner.stop();
}
onYoutubeVideosLoaded(self: YoutubeToolsService) {
for (let item of self.videoList) {
if (item) {
console.log(item);
this.videoList.push({
id: item.snippet.resourceId.videoId,
url: this.youTubeWatchUrl + item.snippet.resourceId.videoId
});
}
}
console.log(this.videoList);
}
ngOnDestroy(): void {
this.youtubeToolsService.change.off(this.onYoutubeVideosLoaded.bind(this));
this.spinner.start();
}
injectParentData() {
this.postId = this.injector.get(PathKey.PostId);
this.stepId = this.injector.get(PathKey.StepId);
this.postType = this.injector.get(PathKey.PostType);
}
}
和UI部分:
<div class="col-md-6 col-md-offset-3">
<h3 class="text-center">Select video</h3>
<div>
<iframe *ngFor="let video of videoList" type="text/html" class="video-responsive" [src]="video?.url | safe" frameborder="0"></iframe>
</div>
<h4>{{videoList.length}}</h4>
</div>
即使videoList.lenth
不顯示。任何人都知道這裏有什麼問題?
UPDATE YoutubeToolsService代碼:
import { NgZone, Injectable} from '@angular/core'
import { OperationDataResult } from '../helpers/operation.models'
import { Config } from '../helpers/social.models'
import { LiteEvent } from '../helpers/lite.event'
import { SocialService } from '../services/social.service'
declare var gapi: any;
@Injectable()
export class YoutubeToolsService {
private loginStatus: any;
private onChange = new LiteEvent<YoutubeToolsService>();
get change() { return this.onChange.expose(); }
videoList: any[] = [];
requestVideoPlaylist(playlistId) {
var requestOptions = {
playlistId: playlistId,
part: 'snippet',
maxResults: 10
};
var request = gapi.client.youtube.playlistItems.list(requestOptions);
request.execute(response => {
var playlistItems = response.result.items;
if (playlistItems) {
this.videoList = playlistItems;
this.onChange.trigger(this);
}
});
}
你能告訴我們'youtubeToolsService'更改'on'&'off'方法代碼嗎? –
@PankajParkar肯定,更新 – Vitaliy