Injecting resolves into directive controllers

后端 未结 2 1958
栀梦
栀梦 2021-02-07 23:50

I\'m using AngularUI router (0.2.13) and have a state defined as such

.state(\'foo\', { 
           template:\'
\',
相关标签:
2条回答
  • 2021-02-08 00:24

    You can't use resolves in directives, but you can pass the result resolved in the state down to the directive which I think accomplishes what you're looking for.

    You'd want to update your state definition to include a controller and set a parameter on the directive:

    .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;
       }
    })
    

    Then update the directive to use this parameter:

    .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: '='
             }
         };
    })
    

    Here's a sample plunker: http://plnkr.co/edit/TOPMLUXc7GhXTeYL0IFj?p=preview

    0 讨论(0)
  • 2021-02-08 00:38

    They simplified the api. See this thread:

    https://github.com/angular-ui/ui-router/issues/2664#issuecomment-204593098

    in 0.2.19 we are adding $resolve to the $scope, allowing you to do "route to component template" style

    template: <my-directive input="$resolve.simpleObj"></my-directive>,

    0 讨论(0)
提交回复
热议问题