Javascript 角度+;UI路由器,更改$stateChangeSuccess上的标题(事件触发太早?)

Javascript 角度+;UI路由器,更改$stateChangeSuccess上的标题(事件触发太早?),javascript,angularjs,events,angular-ui-router,Javascript,Angularjs,Events,Angular Ui Router,我根据ngBoilerplate实现了一个自定义页面标题: 因此,基本上,每个$stateChangeSuccess事件的标题都会更改。问题是,在我的浏览器历史记录中,它将新标题保存为最后一页的标题。因此,例如,如果我在一个标题为“主页”的页面上,并导航到一个标题为“关于”的页面,我的历史记录将显示“关于”作为最后一项,但当我单击它时,将正确导航到“主页”。我担心这真的会让人困惑 所以我想出了一个“黑客”,似乎可以解决这个问题: .controller( 'AppCtrl', function

我根据ngBoilerplate实现了一个自定义页面标题:

因此,基本上,每个
$stateChangeSuccess
事件的标题都会更改。问题是,在我的浏览器历史记录中,它将新标题保存为最后一页的标题。因此,例如,如果我在一个标题为“主页”的页面上,并导航到一个标题为“关于”的页面,我的历史记录将显示“关于”作为最后一项,但当我单击它时,将正确导航到“主页”。我担心这真的会让人困惑

所以我想出了一个“黑客”,似乎可以解决这个问题:

.controller( 'AppCtrl', function AppCtrl ( $scope, $location ) {
  var nextTitle = "";

  $scope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) {
    $scope.pageTitle = nextTitle;
  });

  $scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
    if ( angular.isDefined( toState.data.pageTitle ) ) {
      nextTitle = toState.data.pageTitle + ' | ngBoilerplate' ;
    }
  });
})
现在,标题将首先保存在变量中,并且仅在
$locationChangeSuccess
上分配给作用域。这似乎有效,但我不知道这有多可靠

所以我的问题是,我想,如何正确地做到这一点。如何获得可靠的不断变化的页面标题,从当前状态获取数据


此外,出于兴趣:为什么它不能与
$statechangesucture
一起工作?此事件触发得这么早有什么原因吗?

请看一下它是如何完成的:


用户界面路由器

看看这里是怎么做的:


用户界面路由器
请参阅在UI路由器中设置页面标题的更一般问题。解决方法是使用
$timeout
服务异步运行标题更新。该函数将在当前脚本完成后运行

$rootScope.$on("$stateChangeSuccess", function (event, toState) {
  $timeout(function () {
    // Needed to ensure the title is changed *after* the url change
    // Ensures history entries are correct.
    $window.document.title = toState.name; 
  });
}))

请参阅在UI路由器中设置页面标题的更一般问题。解决方法是使用
$timeout
服务异步运行标题更新。该函数将在当前脚本完成后运行

$rootScope.$on("$stateChangeSuccess", function (event, toState) {
  $timeout(function () {
    // Needed to ensure the title is changed *after* the url change
    // Ensures history entries are correct.
    $window.document.title = toState.name; 
  });

}))

Mean.js为此提供了一个很好的指导。

Mean.js为此提供了一个很好的指导。

如果链接项目被修改或删除,代码片段或解释将非常有用。如果链接项目被修改或删除,代码片段或解释将非常有用。
$rootScope.$on("$stateChangeSuccess", function (event, toState) {
  $timeout(function () {
    // Needed to ensure the title is changed *after* the url change
    // Ensures history entries are correct.
    $window.document.title = toState.name; 
  });