$ (document) .ready () запускается только один раз, когда ваша веб-страница открыта / обновлена.Цитирование официальной документации:
Код, включенный в $ (document) .ready (), будет запущен только после того, как страница объектной модели документа (DOM) будет готова для выполнения кода JavaScript.
Угловые приложения Одностраничные приложения .Это означает, что когда вы используете Angular Router для изменения компонентов в приложении, страница не обновляется, динамически изменяется только содержимое.
Поведение, которое вы видите, заключается в том, что вы изначально открываете свое приложение для него.На странице по умолчанию вызывается функция $(document).ready()
, но в данный момент ваши семантические элементы не находятся в DOM.Функция ready()
выполняется, не может найти ваши элементы и, следовательно, не инициализирует их с настройками.При маршрутизации к вашему компоненту $(document).ready()
больше не вызывается, поскольку страница не обновляется.Изменяется только содержимое директивы <router-outlet>
.Таким образом, по сути, ваши семантические элементы добавляются в DOM, НО, поскольку $(document).ready()
НЕ будет выполняться, они не будут инициализированы с требуемым поведением.Однако когда вы обновляете страницу в маршрутизируемом компоненте, $(document).ready()
IS вызывается, и на этот раз элементы ARE в DOM (потому что, когда Angular инициализирует, он определяет, какой компонент вына основе URL), поэтому код инициализации нацелен на них должным образом, и вы видите поведение, которое ожидается.
Чтобы обойти эту проблему, я бы рекомендовал переместить код инициализации в функцию ngOnInit
.
export class RoutedComponent implements OnInit {
ngOnInit() {
$('.ui.dropdown').dropdown();
$('.top.menu .item').tab();
$('.tabular.menu .item').tab();
}
}
Таким образом, при каждом маршруте к вашему компоненту будет выполняться ваш код инициализации.ngOnInit
- это ловушка жизненного цикла , которая будет вызываться каждый раз, когда создается экземпляр вашего компонента.