Угловая обратная связь
Я хотел бы отправить вызов обратно в директиву через параметр в теге, а затем вызвать этот метод, когда это необходимо внутри директивы. Например, когда нажата кнопка, вызовите метод на родительском контроллере.
У меня есть простой plunker, который не работает
html файл:
<body ng-controller="ParentController">
<h1> Method Arguments </h1>
<h3> open console to view output</h3>
<hello-world onLoadCallback="myCallback(arg1)"></hello-world>
</body>
javascript файл:
var app = angular.module("app",[]);
function ParentController($scope) {
$scope.myCallback = function(var1){
console.log("myCallback", var1);
}
}
app.directive('helloWorld', function() {
return {
restrict: 'AE',
template: '<h3>Hello World!!</h3>',
scope:{
onLoadCallback: '&'
},
link: function(scope, element, attrs, dateTimeController) {
console.log('linked directive, not calling callback')
scope.onLoadCallback('wtf');
}
};
});
Ответы
Ответ 1
Tricky tricky angular, при объявлении аргумента в HTML, ему нужно использовать случай с змеей, вместо того, чтобы соответствовать верблюду.
Работает:
<hello-world on-load-callback="myCallback(arg1)"></hello-world>
Не работает:
<hello-world onLoadCallback="myCallback(arg1)"></hello-world>
Ответ 2
Также обратный вызов должен быть:
scope.onLoadCallback({arg1: 'wtf'});
Именованные параметры затем привязаны к соответствующим параметрам, используемым в атрибуте обратного вызова (не все должны использоваться).