Wstrzyknięcie zamienia się w kontrolery dyrektyw


Używam routera AngularUI (0.2.13) i mam stan zdefiniowany jako taki
.state('foo', { 
template:'<div some-directive>',
resolve:{
foo:function(SomeService){
return SomeService.something().promise;
}
})

i taką dyrektywę:
app.directive('someDirective', function(){
return {
controller: function(data) {
// I want `data` to be injected from the resolve...
// as it would if this was a "standalone" controller
}
}
})

ale to nie działa - parametr
data
generuje błąd UnknownProvider. Zdefiniowanie kontrolera dyrektywy niezależnie i ustawienie go według nazwy w dyrektywie daje ten sam wynik.
Mniej więcej rozumiem, dlaczego tak się dzieje, ale mam dwa pytania:
  • czy istnieje sposób na zrobienie tego, co próbuję zrobić
  • powinienem spróbować to zrobić, czy też wślizgnąłem się tutaj w antywzór

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie możesz używać uprawnień w dyrektywach, ale możesz przekazać wynik rozwiązany w stanie do dyrektywy, która moim zdaniem robi to, czego szukasz.
Chcesz zaktualizować definicję stanu, aby uwzględnić kontroler i ustawić parametr w dyrektywie:
.state('foo', { 
template:'Test<div some-directive something="foo">',
url: 'foo',
resolve:{
foo:function(SomeService){
return SomeService.something();
}
},
controller: function($scope, foo){
$scope.foo = foo;
}
})

Następnie zaktualizuj dyrektywę, aby użyć tej opcji:
.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: '='
}
};
})

Oto przykład tłoka:

http://plnkr.co/edit/TOPMLUXc7 ... eview
http://plnkr.co/edit/TOPMLUXc7 ... eview
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Uprościli interfejs API. Zobacz ten wątek:
https://github.com/angular-ui/ ... 93098
https://github.com/angular-ui/ ... 3098w wersji 0.2.19 dodajemy $ resolution do $ scope, umożliwiając kierowanie do komponentu szablonu stylu
Szablon: My Dyrektywa Wejście = "$ Resolve.SimpleObj" & GT; & My-Dyrektywa i GT; ,

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się