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

AngularJs : Attach a stateParams value to custom data in state objects

本文关键字:对象 状态 数据 自定义 stateParams AngularJs      更新时间:2023-09-26

我正在我的状态对象中定义页面标题,如此处的建议。

$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

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

对于状态参数值,我可以这样做:

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

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

正确的方法是什么?

更新:

我没有提到的是我在 ES6 中使用 angularJs,并且使用模块化架构。因此,每个组件都有自己的作用域。

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

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

因此,我可以决定页面标题是固定值"我的页面标题"还是状态参数值。

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

如果您使用类似于示例的解析:

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) {
    }
]);