我正在构建我的第一个 AngularJS 应用程序。
我想在路由更改时动态更改页面标题,所以我首先尝试将我的应用程序构建为:
<html ng-app>
我想要一个页面级控制器,然后在它下面有子控制器。
所以,我开始了:
var app = angular.module("squareUpYourSavings", ["page1", "page2", "..."]);
app.controller('GlobalController', ['$scope', '$rootScope', function GlobalController($scope, $rootScope) {
$rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
$rootScope.title = current.$$route.title;
});
$rootScope.$on("$locationChangeStart", function (event, nextLocation, currentLocation) {
console.log('nextLocation :: ' + nextLocation);
console.log('currentLocation :: ' + currentLocation);
});
但这不起作用。(不知道为什么)我有一个指向目录级控制器的导航,并且 ng-view 可以工作,但 <title> 不会改变。$locationChange 监听器也不会触发。就好像这个顶级控制器根本没有被听到一样。
所以,然后我更改了 <html> 元素以指定顶级控制器:
<html id="ng-app" ng-controller="GlobalController">
这现在确实有效,但该路线似乎触发了两次。初始页面加载显示:
nextLocation :: location.html#/
currentLocation :: location.html#/
当我然后去一条路线时,它会正确触发之前和之后,但是当我到达那里时会双重触发:
nextLocation :: location.html#savings-video // expected
currentLocation :: location.html#/ // expected
nextLocation :: location.html#/savings-video/ // not expected
currentLocation :: location.html#savings-video // not expected
这是预期的行为吗?我究竟做错了什么?
谢谢,斯科特