Bei der Suche nach Informationen über Angular Richtlinien und vorbei Verhalten Richtlinien, bekomme ich auf einem Isolat Umfang in Richtung des Verfahrens zeigte endete als verbindlich, dhRichtige "eckige" Art und Weise, das Verhalten an die Richtlinie zu übergeben?
scope: {
something: '&'
}
Die documentation für diese Funktionalität ein wenig verwirrend ist, und ich glaube nicht, dass es enden wird, was ich will.
Ich endete mit diesem Schnipsel (vereinfacht für die Kürze), das funktioniert, indem es eine Bereichsfunktion in HomeCtrl
übergeben, und die Richtlinie funktioniert und ruft die Funktion auf. (Nur wenn es wichtig ist, gibt der echte Code ein Versprechen aus der Direktive zurück).
angular.module('app', []);
angular.module('app')
.directive('passingFunction',
function() {
var changeFn,
bump = function() {
console.log('bump() called');
internalValue++;
(changeFn || Function.prototype)(internalValue);
},
internalValue = 42;
return {
template: '<button ng-click="bump()">Click me!</button>',
scope: {
onChange: '<'
},
link: function(scope, element, attrs) {
if (angular.isFunction(scope.onChange)) {
changeFn = scope.onChange;
}
scope.bump = bump;
}
};
})
.controller('HomeCtrl',
function($scope) {
$scope.receive = function(value) {
console.log('receive() called');
$scope.receivedData = value;
};
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.4/angular.min.js"></script>
<div ng-app="app" ng-controller="HomeCtrl">
<passing-function on-change="receive"></passing-function>
<p>Data from directive: {{receivedData}}</p>
</div>
Ist das eine richtige "Angular" Art und Weise, dies zu erreichen? Dies scheint zu funktionieren.
tun Sie in der Steuerung eine benutzerdefinierte Funktion durch den HTML-Code auf feuern wollen, aber ausgelöst durch die Direktive ng-click? Warum verwenden Sie keine Ereignisse und lassen den Controller die Ausführung der Funktion auflösen? –
Ich brauche die Direktive, um eine beliebige Funktion aufrufen zu können. Die echte Anweisung soll eine Suchfunktionalität umschließen, die Funktionen enthält, um Benutzereingaben zu akzeptieren, einen Suchserver aufzurufen und Ergebnisse zu erhalten, aber das einzige, was der Controller interessieren soll, sind Ergebnisse aus der Suche. Letztendlich versuche ich, die Suchergebnisse (im vereinfachten Beispiel oben, der 'interneWert') an den Controller zu übergeben. In Bezug darauf, warum keine Ereignisse verwendet werden, ist das der Grund für die Frage ... wenn es einen besseren Weg gibt, würde ich diesen besseren Weg lieber verwenden. – jdphenix