【问题标题】:Set Page Title with Angular and UI-Router based on data in controller根据控制器中的数据使用 Angular 和 UI-Router 设置页面标题
【发布时间】:2014-07-11 18:15:51
【问题描述】:

我目前正在使用在这个问题中找到的指令来更改我的页面标题。

Set Page title using UI-Router

然后,在我的 app.js 文件中,我将 pageTitle 附加到数据中,如下所示:

.state('home', {
  url: '/home'
  templateUrl: 'home.html'
  controller: 'homeController'
  data: {
    pageTitle: 'Home'
  }
})

例如,假设 homeController 有一个从服务中获取的 $scope.todaysDate 变量。有没有办法在我的路由器中访问该变量,所以我可以将数据和 pageTitle 更改为:

data: {
  pageTitle: 'Home ' + $scope.todaysDate
}

我可以进入控制器并使用$rootScope.pageTitle = 'some value',当我查看 Batarang 控制台工具时,我可以看到它将变量更改为 'some value',但实际页面标题没有改变。

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案1】:

    在这种情况下,resolve 可能会起作用。如果您想确保状态控制器始终可以使用某些数据,您可以使用解析。例如,假设我有一个名为“日历”的服务,它公开了一个名为“getTodaysDate”的函数。我可以做到以下几点:

    .state('home', {
        url: '/home',
        templateUrl: 'home.html',
        controller: 'homeController',
        resolve:{
                pageTitle:  function(calendar){
                return 'Home ' + calendar.getTodaysDate();
            }
        }
    })
    

    现在“pageTitle”将在状态更改之前解析并注入“homeController”。希望这会有所帮助。

    【讨论】:

    • 感谢您提及解决。这似乎是正确的方法。我还没有让它工作。我认为我工厂的代码有问题。 (我之前说是服务,其实是工厂)
    • @twinb 你所拥有的是一项服务。在模块上注册服务的方法不止一种。您正在使用工厂方法(最常见)查看此处了解详细信息:docs.angularjs.org/guide/services
    • @twinb 你有这个运气吗?如果有帮助,我很乐意为您提供一个工作示例。这是一个非常常见的用例,我认为您可能只是在学习曲线很小的情况下苦苦挣扎。
    • 抱歉回复晚了。我无法让它工作,所以暂时放弃了它。我了解 resolve 的工作原理,但我认为我正在使用我试图调用的函数在服务/工厂(好点顺便说一句)中搞砸事情。如果不占用您太多时间,一个可行的示例会很棒。
    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多