我有一个非常简单的指令,我希望能够使用指令和范围提供的参数运行回调。例如:
<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获取了一个函数 - 执行该函数永远不会导致调用我的welcome函数(在控制器中定义)(注意:在Angular 1.5.x上)。我假设范围是错误的(它使用隔离的范围而不是父范围) - 但我确实需要一个隔离的范围(例如简化)。我做错了什么?
答案 0 :(得分:2)
您可以使用scope.$parent
作为$parse
来电的参数吗?您可能还希望用$scope.$apply(function () { ... });
包装。
答案 1 :(得分:0)
您可以使用&
isolate scope binding。我还将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)">