Sto cercando di creare una direttiva che verrà utilizzata in più punti nell'app e voglio che entri in un controller.
Quando si utilizza il metodo del controller
return {
...
controller: "BlogDashCourseCtrl",
...
}
ottiene il controller bene. Ma quando lo richiedo
return {
...
require: "^BlogDashCourseCtrl",
...
link: function($scope, iElm, iAttrs) {
$scope.title = iAttrs.title; // Do not share me with other directives
if($scope.title === $scope.step) { // $scope.step comes from a shared scope
...
}
}
}
non riesce a trovare il controller.
Non voglio che il controller sia chiamato multiplovolte. Voglio solo che le direttive condividano un ambito di applicazione, abbiano anche un ambito privato (quindi $ scope nella direttiva non si riempie di bolle) e fa qualcosa con un servizio.
risposte:
0 per risposta № 1Una direttiva è collegata a un nodo DOM. Un nodo DOM non può avere due ambiti. O si condivide l'ambito padre o ne si crea uno isolato e si eredita esplicitamente elementi da esso.
BlogDashCourseCtrl:
this.step = "whatever"; //maybe $scope.step
SomeDirective:
return {
...
require: "^BlogDashCourseCtrl",
...
link: function($scope, iElm, iAttrs, blogDashCourseCtrl) {
$scope.title = iAttrs.title; // Do not share me with other directives
if($scope.title === blogDashCourseCtrl.step) { // $scope.step comes from a shared scope
...
}
}
}
Notare che blogDashCourseCtrl
non fa riferimento a $scope
di tale direttiva / controllore, ma il riferimento stesso. C'è davvero ampia documentazione su questo, con esempi.