ich eine Richtlinie ähnlich wie diese dieses:Rebinding dies auf Winkel Rückruf von innen Link funtion
app.directive('example', function() {
return {
restrict: 'E',
transclude: true,
scope: {
callback: '&'
},
template: '<span ng-click="example.callback()">Click Me</span>',
bindToController: true,
controllerAs: 'example',
controller: function() {
this.counter = 0;
this.incrementCount = function() {
this.counter++;
};
this.getCount = function() {
return this.counter;
};
},
link: function(scope, el, attrs, ctrl) {
var oldCallback = scope.callback;
ctrl.callback = function() {
console.log(ctrl);
return oldCallback.call(ctrl); // I want to be able to use `this` as the controller to access the API from within the callback
};
}
};
});
mit einem Controller
app.controller("ctrl", ["$scope", function(s) {
s.callback = function() {
this.incrementCount();
console.log("Value: " + this.getCount());
};
}]);
Und Ansicht
<div ng-app="app">
<div class="container" ng-controller="ctrl">
<example callback="callback()"></example>
</div>
</div>
Whe n ich log ctrl innerhalb der ctrl.callback in der link-funktion protokolliert es die beispiel controller wie ich erwarte, aber wenn oldCallback aufgerufen wird, wird es nicht ctrl rebound zu this
wie ich will. Gibt es eine Möglichkeit, auf die API zuzugreifen, die im Controller der Direktive innerhalb des Rückrufs für den Bereich definiert ist, während weiterhin ein isolierter Bereich für die Richtlinie verwendet wird?
Warum die Link-Funktion überhaupt verwenden? Sie sollten in der Lage sein, $ scope an den Controller zu übergeben und von dort auf $ scope.callback zuzugreifen. –
In der aktuellen Direktive verwende ich Link, um den Callback so zu dekorieren, dass er "true" zurückgibt, es sei denn, es gibt explizit den Wert "false" für die Flusskontrolle zurück. – konapun