Переключение между вкладками, созданными с помощью "material-tab", уничтожает все дочерние элементы этой "вкладки" в dom.
Ниже вы можете найти файлы проекта простого приложения, чтобы воспроизвести мою проблему.я использую dart 2 sdk и с угловым 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, мне нужно только добавить материалDirectives и materialProviders в нашAppComponent, как вы видите.
вы видите одну страницу с 2 вкладками:
- Вкладка «Музыка» содержит встроенный YouTube iframe
- Вкладка «Избранное» содержит тольконекоторый html (в идеале список видео на YouTube, которое я хочу воспроизвести)
Поэтому, когда я нажимаю на вкладке «Музыка», iframe начинает воспроизводить музыку, но когда я нажимаю на вкладке «Избранное», iframe не воспроизводится.больше музыки.При проверке DOM с помощью инструментов Chrome Dev, я вижу, что содержимое вкладки "стерты" (не уверен, что это правильное слово) из DOM.И только при повторном нажатии на вкладку содержимое вкладки снова добавляется в домен.Это действительно то, что нам нужно в целом, но для этого конкретного случая мне бы очень хотелось, чтобы iframe продолжала воспроизводить музыку, пока пользователи просматривают свой список избранного.
У вас есть идеи или примеры кодов для:
- сохранять содержимое dom привязанным к dom, даже когда мы меняем tab (таким образом, iframe должен работать, даже когда мы переключаем tab)
- или просто способ сохранить youtubeИгра в iframe (может быть, глобально? Но это кажется грязным)
Поскольку я новичок в дартс и угловатый, возможно, я пропустил шаблон / стратегию дизайна или функции, которые я не использовал.
Если вы перейдете по этой ссылке jsfiddle, вы сможете найти то, что я действительно хочу сделать, но это с необработанным js / html: https://jsfiddle.net/gsfkL6xL/353/