【问题标题】:Update views after YouTube iFrame events in Angular 2在 Angular 2 中的 YouTube iFrame 事件后更新视图
【发布时间】:2017-04-03 11:09:21
【问题描述】:

我正在尝试在 angular2 中使用 YouTube iFrame API,但遇到了问题。

let onStateChange = (state) => {
    if (state.data === window['YT'].PlayerState.PLAYING) {
        console.log("window['YT'].PlayerState.PLAYING");
        this.isPlaying = true;
    }
    if (state.data === window['YT'].PlayerState.PAUSED) {
        console.log("window['YT'].PlayerState.PAUSED");
        this.isPlaying = false;
    }
};

然后

this.player = new window['YT'].Player("video-player", {events: { onStateChange } });

处理播放器事件的回调被执行,但视图没有得到更新。

这里是视图:

<button class="control" (click)="play()" *ngIf="!isPlaying">Play</button>
<button class="control" (click)="pause()" *ngIf="isPlaying">Pause</button>

当我点击“播放”时,视频会播放,但“暂停”按钮没有出现(“播放”按钮也没有消失)。

当我再次单击未隐藏的“播放”按钮时,视频继续播放,“播放”按钮被“暂停”取代。所以它第二次起作用了。

我已经用谷歌搜索过了,但没有找到解决方案:

【问题讨论】:

    标签: javascript angular youtube


    【解决方案1】:

    我刚刚找到了解决方案。

    导入 NgZone

    import { ..., NgZone } from '@angular/core';
    

    将 NgZone 添加为属性

    constructor(private ngZone: NgZone) {}
    

    然后

    let onStateChange = (state) => {
        this.ngZone.run(() => { // This was the trick
            if (state.data === window['YT'].PlayerState.PLAYING) {
                this.isPlaying = true;
            }
            if (state.data === window['YT'].PlayerState.PAUSED) {
                this.isPlaying = false;
            }
        });
    };
    
    this.player = new window['YT'].Player("video-player", { events: { onStateChange } });
    

    【讨论】:

    • 你有完整代码的链接吗?我正在努力让 angular 2 运行的 iframe api。
    猜你喜欢
    • 2016-09-06
    • 2016-09-01
    • 2016-08-23
    • 2017-09-07
    • 2017-09-30
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多