【发布时间】:2018-06-26 00:05:18
【问题描述】:
在使用“material-tab”创建的选项卡之间切换会破坏 dom 中此“选项卡”的所有子元素。
您可以在下面找到一个简单应用的项目文件来重现我的问题。 我正在使用 dart 2 sdk 和 angular 5.0.0 作为依赖项
main.dart:
import 'package:angular/angular.dart';
import 'package:angular_web_app/app_component.template.dart' as ng;
void main() {
runApp(ng.AppComponentNgFactory);
}
index.html:
<!DOCTYPE html>
<html>
<head>
<title>my web app</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles.css">
<link rel="icon" type="image/png" href="favicon.png">
<script defer src="main.dart.js"></script>
</head>
<body>
<my-app>Loading...</my-app>
</body>
</html>
app_component.dart:
import 'package:angular/angular.dart';
import 'package:angular_components/angular_components.dart';
@Component(
selector: 'my-app',
styleUrls: ['app_component.css'],
templateUrl: 'app_component.html',
directives: [ coreDirectives, materialDirectives],
providers: [materialProviders],
)
class AppComponent{}
app_component.html:
<material-tab-panel>
<material-tab label="Music">
<iframe id="player" type="text/html" width="640" height="390"
src='https://www.youtube.com/embed/JvqXj2cAaY4?autoplay=1'
frameborder="0"></iframe>
</material-tab>
<material-tab label="Favorites">
<h2>My favorite musics</h2>
</material-tab>
</material-tab-panel>
这里和默认生成的文件相比没什么特别的,我只是有一个自定义的app_component.html,只需要在我们的AppComponent中添加materialDirectives和materialProviders就可以了。
您会看到一个带有 2 个标签的页面:
- “音乐”标签包含嵌入式 youtube iframe
- “收藏夹”选项卡仅包含一些 html(最好是 youtube 列表 我想播放的视频)
因此,当我单击“音乐”选项卡时,iframe 开始播放音乐,但是当我单击“收藏夹”选项卡时,iframe 不再播放音乐。 在使用 chrome 开发工具检查 dom 时,我看到一个选项卡的内容已从 dom 中“擦除”(不确定它是否是正确的词)。 只有当再次单击选项卡时,选项卡的内容才会再次添加到 dom。 这确实是我们通常需要的,但对于这种特殊情况,我真的希望 iframe 仍在播放音乐,同时用户浏览他们最喜欢的音乐列表。
你有什么想法或示例代码:
- 即使我们更改选项卡,也保持 dom 的内容附加到 dom(这样 即使我们切换标签,iframe 也应该仍在运行)
- 或者只是保持 youtube iframe 播放的一种方式(也许在全球 方式 ?但这似乎很脏)
由于我是 dart 和 Angular 的新手,我可能错过了我没有使用的设计模式/策略或功能。
如果您点击这个 jsfiddle 链接,您可以找到我真正想做的事情,但这是使用原始 js/html:https://jsfiddle.net/gsfkL6xL/353/
【问题讨论】:
标签: html angular iframe dart angular-dart