/ / Angularjs richiede il controller dalla direttiva - javascript, angularjs, angularjs-direttiva

Angularjs richiede controller dalla direttiva - javascript, angularjs, angularjs-directive

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 № 1

Una 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.