Angular - 我正在使用 YouTube 播放器 API我想要重新加载页面的刷新组件

如何解决Angular - 我正在使用 YouTube 播放器 API我想要重新加载页面的刷新组件

我创建了一个关于我的工作的简单应用程序,我正在使用 YouTube 播放器 API 来播放/嵌入我的工作视频。我只想在每次访问我的投资组合页面时播放随机视频而无需重新加载。而且我还想使用 API 提供的播放/暂停事件,比如如果视频正在播放,我想在下面给出一些带有 <p> 标签提示。我正在使用 Ionic,每次访问我的页面时,我都使用 ionViewWillEnter() {} 生命周期播放随机视频。

这是我的代码

portfolio-page.html

<div>
<iframe [src]="randomURL" id="video"></iframe>
<p>{{ tips }}</p>
</div>

portfolio-page.ts

ionViewDidEnter() {
this.tips = "Some tips here"
this.randomURL = "https://www.youtube.com/embed/"my random video URL";

// Play Pause events
window['onYouTubeIframeAPIReady'] = (e) => {
this.YT = window['YT'];
this.player = new window['YT'].Player('player',{
videoId: id,
events: {
'onStateChange': (event) => {
switch (event.data) {
case window['YT'].PlayerState.PLAYING:
this.tip = "Some tips here"
break;

但这里的问题是当我第一次访问该页面时,播放暂停事件工作正常。如果再次访问该页面,则播放暂停事件不起作用。我想要做的就是只刷新组件页面(即 HTML 页面)而无需重新加载。

解决方法

您可以使用:

  1. 在加载之前生成 randomURL 并填充组件的解析器。

    app-routing.ts

     RouterModule.forRoot([
         {
            path: '/portfolio',component: PortfolioPageComponent,resolve: { randomURL: PortfolioResolver }
           }
         ])
     ])
    

portfolio-resolver.ts

import { Injectable } from '@angular/core';
import { Resolve } from '@angular/router';
import { Observable } from 'rxjs';

export class PortfolioResolver implements Resolve<any> {
  constructor() {}

  resolve(): Observable<any> {
    //generate randomURL
    return randomURL
  }
}

portfolio-page.ts

import { Component,OnInit } from '@angular/core';

import { ActivatedRoute } from '@angular/router';

@Component({ ... })
export class PortfolioPageComponent implements OnInit {
  data: any;
  randomUrl: any;

  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    this.data = this.route.snapshot.data;
    this.randomUrl = this.data.randomURL;
    // do what you need with new random url
  }
}
  1. 只需将一些变量作为标志从父组件传递到子组件(或通过 this.router.navigate(['/portfolio',{ reload: true }]); 从另一个地方)并接收类似 this.route.snapshot.paramMap.get('reload'); 以通知何时必须重新加载。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?