Angularjs 将解析注入到指令控制器中

Angularjs 将解析注入到指令控制器中,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我使用的是AngularUI路由器(0.2.13),并且有一个这样定义的状态 .state('foo', { template:'<div some-directive></div>', resolve:{ foo:function(SomeService){ return SomeService.something().promise;

我使用的是AngularUI路由器(0.2.13),并且有一个这样定义的状态

.state('foo', { 
           template:'<div some-directive></div>', 
           resolve:{
               foo:function(SomeService){
                   return SomeService.something().promise;
               }
           })
但是这不起作用,
数据
参数会导致未知的提供者错误。独立地定义指令控制器并在指令中按名称设置它具有相同的结果

我或多或少明白为什么会发生这种情况,但有两个问题:

  • 有没有办法做我想做的事
  • 我应该试着这么做,还是我在这里陷入了反模式

  • 您不能在指令中使用resolves,但是您可以将在状态中解析的结果传递给指令,我认为该指令完成了您要查找的内容

    您希望更新状态定义以包含控制器并在指令上设置参数:

    .state('foo', { 
       template:'Test<div some-directive something="foo"></div>',
       url: 'foo',
       resolve:{
           foo:function(SomeService){
               return SomeService.something();
           }
       },
       controller: function($scope, foo){
         $scope.foo = foo;
       }
    })
    

    下面是一个示例:他们简化了api。请参阅此线程:

    在0.2.19中,我们将$resolve添加到$scope,允许您执行“路由到组件模板”样式

    模板:


    对不起,我迟到了。这是一个很好的答案-在看到它之前,我决定采取几乎完全相同的方式。如果我的模板是一个元素指令,例如“而不是属性指令”,我将如何做到这一点?在这种情况下,这里定义的控制器似乎没有启动。指令本身内部有一个控制器…@Brad Barber I+1和Mathias Max在这里,似乎如果指令是一个元素,解析就不起作用。这很奇怪,不是吗?我可以用指令作为元素从上面的答案更新plunker,但我看不出有什么问题。您是否使用旧版本的angular,其中默认情况下指令仅限于属性?如果是这样,请在指令定义中设置
    restrict='AE'
    .state('foo', { 
       template:'Test<div some-directive something="foo"></div>',
       url: 'foo',
       resolve:{
           foo:function(SomeService){
               return SomeService.something();
           }
       },
       controller: function($scope, foo){
         $scope.foo = foo;
       }
    })
    
    .directive('someDirective', function(){
         return {
             controller: function($scope) {
               // I want `data` to be injected from the resolve... 
               // as it would if this was a "standalone" controller
               console.log('$scope.something: '+ $scope.something);
             },
             scope: {
               something: '='
             }
         };
    })