angularjs – 使用UI-Router设置页面标题

前端之家收集整理的这篇文章主要介绍了angularjs – 使用UI-Router设置页面标题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在迁移我的基于AngularJS的应用程序使用ui路由器而不是内置路由。我有它配置如下所示
.config(function($stateProvider,$urlRouterProvider) {
$urlRouterProvider.otherwise('/home');
$stateProvider
    .state('home',{
        url: '/home',templateUrl : 'views/home.html',data : { pageTitle: 'Home' }

    })
    .state('about',{
        url: '/about',templateUrl : 'views/about.html',data : { pageTitle: 'About' }
    })
     });

如何使用pageTitle变量动态设置页面标题?使用内置的路由,我可以做

$rootScope.$on("$routeChangeSuccess",function(currentRoute,prevIoUsRoute){
    $rootScope.pageTitle = $route.current.data.pageTitle;
  });

然后在HTML中绑定变量,如下所示

<title ng-bind="$root.pageTitle"></title>

是否有类似的事件,我可以挂钩使用ui路由器?我注意到有’onEnter’和’onExit’函数,但他们似乎绑定到每个状态,并将要求我重复代码为每个状态设置$ rootScope变量。

使用$ stateChangeSuccess。

你可以把它放在一个指令:

app.directive('updateTitle',['$rootScope','$timeout',function($rootScope,$timeout) {
    return {
      link: function(scope,element) {

        var listener = function(event,toState) {

          var title = 'Default Title';
          if (toState.data && toState.data.pageTitle) title = toState.data.pageTitle;

          $timeout(function() {
            element.text(title);
          },false);
        };

        $rootScope.$on('$stateChangeSuccess',listener);
      }
    };
  }
]);

和:

<title update-title></title>

演示:http://run.plnkr.co/8tqvzlCw62Tl7t4j/#/home

代码http://plnkr.co/edit/XO6RyBPURQFPodoFdYgX?p=preview

即使使用$ stateChangeSuccess,$ timeout仍需要历史记录是正确的,至少当我测试自己。

编辑:2014年11月24日 – 声明方法

app.directive('title',$timeout) {
    return {
      link: function() {

        var listener = function(event,toState) {

          $timeout(function() {
            $rootScope.title = (toState.data && toState.data.pageTitle) 
            ? toState.data.pageTitle 
            : 'Default title';
          });
        };

        $rootScope.$on('$stateChangeSuccess',listener);
      }
    };
  }
]);

和:

<title>{{title}}</title>

演示:http://run.plnkr.co/d4s3qBikieq8egX7/#/credits

代码http://plnkr.co/edit/NpzQsxYGofswWQUBGthR?p=preview

猜你在找的Angularjs相关文章