Угловая обратная связь

Я хотел бы отправить вызов обратно в директиву через параметр в теге, а затем вызвать этот метод, когда это необходимо внутри директивы. Например, когда нажата кнопка, вызовите метод на родительском контроллере.

У меня есть простой 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'});

Именованные параметры затем привязаны к соответствующим параметрам, используемым в атрибуте обратного вызова (не все должны использоваться).