解决AngularJS中的状态

时间:2015-06-09 08:21:59

标签: angularjs

我需要向控制器提供一些内容数据:

state('admin.businesses.employees.all', {
    resolve: {
        executorsListTitle: 'All employees',
        executorsEmptyListMessage: 'Add the first employee'
    },
    url: '/all',
    controller: 'ExecutorsController',
    templateUrl: 'templates/admin/executors/index.html'
})

控制器代码:

module.controller(
    'ExecutorsController', 
     [
      '$scope', '$rootScope', '$state', 
      '$stateParams', '$modal', 'executorsListTitle', 
      'executorsEmptyListMessage', 'Executor', 
      function($scope, $rootScope, $state, $stateParams, $modal, executorsListTitle, executorsEmptyListMessage, Executor) {
          // Some code
      }
 )

但是当我试图进入这种状态时,我无法做到这一点 - 按下按钮什么都不做;如果我从状态描述中删除了解决方案,那就很好。我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:6)

状态机的决心期望一把钥匙和工厂。 doc states

  
      
  • key - {string}:要注入控制器的依赖项的名称。
  •   
  • factory - {string | function}
  •   

当你向工厂提供一个字符串时:

  

如果是string,则它是服务的别名。

如果要返回字符串,可以执行以下操作:

state('admin.businesses.employees.all', {
    resolve: {
        executorsListTitle: function() {
             return 'All employees';
        },
        executorsEmptyListMessage: function() {
             return 'Add the first employee';
        },
    },
    url: '/all',
    controller: 'ExecutorsController',
    templateUrl: 'templates/admin/executors/index.html'
})

如果您使用的是静态数据(您要解析的字符串),您还可以使用自定义数据属性:

state('admin.businesses.employees.all', {
    data: {
        executorsListTitle: 'All employees',
        executorsEmptyListMessage: 'Add the first employee'
    },
    url: '/all',
    controller: 'ExecutorsController',
    templateUrl: 'templates/admin/executors/index.html'
})

如果您使用此方法,您可以在控制器中访问如下数据:

$state.current.data.executorsListTitle

您可以直接使用此方法使用字符串。 Here是自定义数据属性的文档。