我按照建议here在状态对象中定义页面标题。

$stateProvider
  .state('project', {
    url: '/projects/:origin/:owner/:name',
    template: '<project></project>',
    data : { pageTitle: 'Project page title'},
  });


所以以后我可以用这种方式访问​​它:

$state.current.data.pageTitle


现在...我想做的是,不是要有一个固定的pageTitle值,而是要访问一个stateParams。

请注意,以下示例不起作用,这就是我希望它起作用的方式。

$stateProvider
  .state('project', {
    url: '/projects/:origin/:owner/:name',
    template: '<project></project>',
    data : { pageTitle: $stateParams.name},
  });


我也可以使用属性resolve:

解决:{title:'项目页面标题'},

对于stateParams值,我可以这样做:

resolve:{
    pageTitle: ['$stateParams', function($stateParams){
      return $stateParams.name;
    }]
}


但是然后console.log($ state.current.resolve.pageTitle);在我的控制器中将返回整个函数而不是结果。

这样做的正确方法是什么?

更新:

我没有提到的是我在ES6中使用angularJs,并且使用了模块化体系结构。
因此,每个组件都有其自己的范围。

您可以检查我以前的post,以对我使用的模块化体系结构有一个更好的了解。

我正在构建一个获取父状态的面包屑(使用定义的pageTitle)。
因此,在每个模块中定义页面标题名称将是完美的。

因此,我可以决定页面标题是固定值“我的页面标题”还是stateParams值。

也许这是完全错误的,不应该那样做。让我知道是否是这种情况。

最佳答案

如果使用类似示例的解决方案:

resolve:{
    pageTitle: ['$stateParams', function($stateParams){
        return $stateParams.name;
    }]
}


您需要将pageTitle注入到控制器中:

angular.module('app').controller('controller', [
             'pageTitle',
    function (pageTitle) {

    }
]);


但是我看不到与注入$stateParams有什么不同:

angular.module('app').controller('controller', [
             '$stateParams',
    function ($stateParams) {

    }
]);

09-25 19:19