Я пытаюсь сделать одностраничное приложение с помощью Angular, и я хочу динамически изменять названия страниц на основе представлений. Я пытался делать это с помощью директив, как показано в следующем коде:Угловые движения неожиданно тег заголовка внутри тела
<!-- index.html !-->
<html ng-app="MyApp">
<head>
<page-title></page-title> <!-- ....................LINE 1 !-->
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js">
</script>
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-route.js">
</script>
<script type="text/javascript"
src="/js/index.js">
</script>
</head>
<body>
<nav-bar></nav-bar>
<div ng-view></div>
...
Ниже моя директива код:
app.directive('pageTitle', function() {
return {
controller: 'titleController',
template: '<title>{{ page.title }}</title>' //.............LINE 2
}
});
Названия меняются, как и ожидалось. Все работает отлично, за исключением того факта, что любой код, который должен находиться внутри тега <head>
, теперь перемещается внутри тела, включая теги заголовка, стиля и сценария. Это плохо для SEO. Я искал проблему и нашел некоторые альтернативные решения, чтобы сделать то же самое по ссылке this, но не точное решение и объяснение этой аномалии. Я даже попытался изменить ЛИНИЯ 1 и LINE 2 следующим образом:
<title><page-title></page-title></title> << LINE 1
template: '{{ page.title }}' << LINE 2
И это становится еще более неожиданным. Он вообще не изменяет заголовок и вместо этого выводит <page-title></page-title>
прямо на заголовок каждой страницы, как если бы не была определена директива для тега <page-title>
. Мне нужно объяснить некоторые из этих аномалий в Угловом. :(
Как вы определяете свой '$ scope.page.title'? Не могли бы вы добавить код контроллера? –