当前位置: 首页 > 面试题库 >

使用UI-Router设置页面标题

万楷
2023-03-14
问题内容

我正在迁移基于AngularJS的应用程序以使用ui-router而不是内置路由。我将其配置如下所示

.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-router上?我注意到有“ 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);
          }, 0, 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', ['$rootScope', '$timeout',
  function($rootScope, $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



 类似资料:
  • 问题内容: SPA是Angular的绝妙之处,但是如果我需要其他与​​index.html不相关的页面怎么办,具有不同ui视图的UI-Router状态又如何实现呢? 例如,我有 index.html : app.js : 现在,我需要与index.html完全不同的 login.html (不需要索引的页眉,页脚,侧边栏),但是config stateProvider仅查找index.html u

  • 在跳转到新页面的时候一并设置标题 QN.navigator.push({ url: 'http://www.taobao.com', title: '页面标题' query: { }, settings: { animate: true, //是否展示动画 request: true, } error(err

  • 问题内容: 假设我有以下3个Angular UI Router状态: 如果直接转换为,我该如何告诉Angular UI Router进入状态? 理想情况下,我想要的是这样的: 然后,在我的代码中,我希望$ state.go(’adminCompanies’)等同于$ state.go(’adminCompanies.list’) 问题答案: 由于您的应用程序当前已设置,因此您不需要任何明确的逻辑。

  • 本文向大家介绍使用vue-router切换页面时实现设置过渡动画,包括了使用vue-router切换页面时实现设置过渡动画的使用技巧和注意事项,需要的朋友参考一下 背景 今天在编写页面时,看到页面没有任何效果就只是直入直出,完全没有一点逼格,所以想要实现类似于原生app的那种切换页面时的特效,遂开始google,发现网上各种方案都是各有优缺点,于是整理了自认为优雅的方案并记录下来. 实现难点 如何

  • 本文向大家介绍angular-ui-router 页码参数,包括了angular-ui-router 页码参数的使用技巧和注意事项,需要的朋友参考一下 示例 类似于,int但仅接受正整数(当有page参数时,可用于分页。 定义: 并使用: 柱塞和相关的答案。

  • 问题内容: 如何使用从数据库中获取的名称作为templateUrl文件名? 我已经试过了: 如果我的$ rootScope.template来自数据库查询,那似乎不起作用。不知道为什么,但是不起作用。 如果在我的控制器中执行$ rootScope.template =“ whatever.html”,则一切正常,但是,如果我从数据库中查询模板,则什么也不会发生。templateProvider中的