AngularJS 无法在 Controller 上注入已解析的对象

AngularJS Can't inject resolved object on Controller

在我的代码中有一个状态和一个子状态

.state('tab.tab1', {
  url: '/tab1',
  views: {
    'tab-tab1': {
      templateUrl: 'templates/tab-tab1.html',
      controller: 'tab1Ctrl'
    }
  }

})

.state('tab.tab2', {
url: '/tab2/:objectId',
views: {
  'tab-tab1': {
    templateUrl: 'templates/tab-tab2.html',
    controller: 'tab2Ctrl',
    resolve: {
        resolvedObject: function(){
          return 'this is a test'; 
        }
    }
  }
}

})

在子状态中,我想解析一个对象,但该对象永远不会注入控制器。

.controller('tab2Ctrl', function($scope, resolvedObject){
   alert(JSON.stringify(resolvedObject)); 
 })

所以,我做错了什么? 提前致谢!

解析属性是一个地图对象。地图对象包含 key/value 对:

key – {string}:要注入控制器的依赖名称。 工厂 - {字符串|函数}: 如果是字符串,则它是服务的别名。 否则,如果是函数,则将其注入并将 return 值视为依赖项。如果结果是一个承诺,它会在控制器被实例化并将其值注入控制器之前解决。 https://github.com/angular-ui/ui-router/wiki

你的做法是正确的。您的所有期望都是有效的,代码 原样 应该可以工作。

我创建了 working examle here,几乎使用了您的代码 1:1。它应该可以帮助您找到不同之处...

这些是状态:

    .state('tab', {
      url: "/tabs",
      templateUrl: 'tpl.tabs.html',
    })
    .state('tab.tab1', {
      url: '/tab1',
      views: {
        'tab-tab1': {
          templateUrl: 'tpl.html',
          controller: 'tab1Ctrl'
        }
      }
    })
  .state('tab.tab2', {
    url: '/tab2/:objectId',
    views: {
      'tab-tab1': {
        templateUrl: 'tpl.html',
        controller: 'tab2Ctrl',
        resolve: {
          resolvedObject: ['$stateParams', function($stateParams) {
            return 'this is a test for objectId: ' + $stateParams.objectId;
          }]
        }
      }
    }

如我们所见,我什至扩展了您的示例,使用了 objectId 状态参数。它正在工作...

控制器没有变化

.controller('tab1Ctrl', ['$scope',
    function($scope) {}
])
.controller('tab2Ctrl', ['$scope', 'resolvedObject',
    function($scope, resolvedObject) {
      alert(JSON.stringify(resolvedObject)); 
    }
])

标签模板:

<div>      
  <h3>current state name: <var>{{$state.current.name}}</var></h3>

  <ul>
    <li><a href="#/tabs/tab1">#/tabs/tab1</a>
    <li><a href="#/tabs/tab2/obj1">#/tabs/tab2/obj1</a>
    <li><a href="#/tabs/tab2/obj2">#/tabs/tab2/obj2</a>
  </ul>

  <h5>place for tab-tab1</h5>
  <div ui-view="tab-tab1" ></div>

  <h5>place for tab-tab2</h5>
  <div ui-view="tab-tab2" ></div>      
</div>

一切都按预期进行。在action here

中查看