Директива 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)">