Директива AngularJS запускает обратный вызов с параметрами

У меня есть довольно простая директива, которую я хотел бы иметь возможность выполнять обратный вызов с параметрами, предоставленными директивой и областью действия. Например:

<div ng-repeat="user in users">
  <div sample="..." callback="welcome(user, $message)">
  </div>
</div>

У меня проблемы с использованием $ parse для обработки этого. Моя примерная директива выглядит следующим образом:

app.directive('sample', ['$parse', function ($parse) {
  return {
    restrict: 'A',
    scope: {},
    link: function (scope, element, attrs) {
      // ...
      function greet () {
        var callback = $parse(attrs.callback);
        callback(scope, { $message: 'Howdy' });
      }
    },
  },
}]);

Однако, несмотря на получение функции из $ parse - выполнение этой функции никогда не приводит к вызову моей функции приветствия (определенной в контроллере) (примечание: в Angular 1.5.x). Я предполагаю, что область видимости как-то неправильна (что она использует изолированную область вместо родительской области видимости) - но мне нужна изолированная область (упрощенная, например). Что я делаю неправильно?

2 ответа

Решение

Вы можете использовать scope.$parent в качестве параметра для вашего $parse вызов? Вы также можете обернуть $scope.$apply(function () { ... });,

Вы можете использовать & изолировать область видимости. Я также предоставил бы user возражать против вашей директивы

return {
  restrict: 'A',
  scope: {
    user: '<',
    callback: '&'
  }
  link: function(scope) {
    // ...
    function greet() {
      scope.callback({
        user: scope.user,
        $message: 'Howdy'
      })
    }
  }
}

а также

<div sample="..." user="user" callback="welcome(user, $message)">
Другие вопросы по тегам