Ich habe derzeit eine Richtlinie, die ist mit Eigenschaften aus dem übergeordneten Controllers Umfang mit:Zugriff geordneten Bereichs in der Richtlinie, wenn controllerAs
.controller('MainCtrl', function($scope) {
$scope.name = 'My Name';
})
.directive('myDirective', function() {
return {
scope: true,
controller: function($scope) {
console.log($scope.name); // logs 'My Name'
}
};
})
Jetzt bewege ich mich über zu controllerAs
Syntax in meinem Controller, aber ich weiß nicht Ich weiß, wie ich einen Verweis auf das Controller-Objekt im Controller meiner Direktive bekomme.
.controller('MainCtrl', function() {
var vm = this;
vm.name = 'My Name';
})
.directive('myDirective', function() {
return {
scope: true,
controller: function($scope) {
console.log(vm.name); // logs 'Undefined'
}
};
})
Hier a plunkr das Problem veranschaulicht.
Ich fand auch , die versucht, etwas ähnliches zu erklären, aber in diesem Fall ist er nur den gleichen Controller wiederverwenden.
Das habe ich gebraucht - danke. Ich dachte nicht, dass die Beziehung von 'vm' in der html wirklich' $ scope.vm' ist, was bedeutet, dass ich immer noch auf die Eigenschaften in der Kette zugreifen kann. Ich mag auch den Ratschlag zum Thema "Isolate Scope" - ich dachte, isolate scopes würden nur verwendet, um Interaktionen zu vermeiden, anstatt explizit zu sein. – diplosaurus
Um meinen Eltern-Controller in der Direktive mit ControllerAs zu verwenden, kann ich $ scope.vm verwenden ... aber dann harcodiere ich vm in meiner Direktive ... und lasse sagen, ob ich es auch woanders benutzen möchte muss sicherstellen, dass der Alias meines übergeordneten Controllers vm..anderewise wird es nicht funktionieren .. Gibt es irgendwelche Arbeit für diese ..? –
@rishitiwari im Allgemeinen sollten Sie danach streben, agnostische Anweisungen zu erstellen, die keine Abhängigkeit von ihrem übergeordneten Host haben. Statt auf den übergeordneten Controller zuzugreifen, sollten Sie die Daten, mit denen Ihre Anweisung arbeitet, als Argumente akzeptieren. – Claies