AngularJs:将stateParams值附加到状态对象中的自定义数据

时间:2016-02-19 10:19:24

标签: javascript angularjs angular-ui-router

我在我的状态对象中定义了一个页面标题,如建议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},
  });

我还可以使用属性解决

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

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

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

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

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

更新:

我没有提到的是我使用angularJs和ES6,我使用模块化架构。 因此,每个组件都有自己的范围。

您可以查看我之前的post,以便更好地了解我正在使用的模块化架构。

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

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

也许这是完全错误的,不应该这样做。如果是这样,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果你使用像你的例子那样的决心:

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) {

    }
]);