所以我有这个指令,比如说mySave
,几乎就是这个
app.directive('mySave', function($http) {
return function(scope, element, attrs) {
element.bind("click", function() {
$http.post('/save', scope.data).success(returnedData) {
// callback defined on my utils service here
// user defined callback here, from my-save-callback perhaps?
}
});
}
});
元素本身看起来像这样
<button my-save my-save-callback="callbackFunctionInController()">save</button>
callbackFunctionInController现在只是
$scope.callbackFunctionInController = function() {
alert("callback");
}
当我在my-save指令中使用
console.log()
attrs.mySaveCallback
时,它只是给了我一个字符串callbackFunctionInController()
,我读了somewhere我应该对其进行$ parse解析,这样就可以了,所以我尝试使用$parse(attrs.mySaveCallback)
给我带来了一些功能,但是我几乎没有在寻找,它给了我function (a,b){return m(a,b)}
我究竟做错了什么?这种方法从一开始就存在缺陷吗?
最佳答案
因此,似乎最好的方法是使用ProLoser建议的隔离范围
app.directive('mySave', function($http) {
return {
scope: {
callback: '&mySaveCallback'
}
link: function(scope, element, attrs) {
element.on("click", function() {
$http.post('/save', scope.$parent.data).success(returnedData) {
// callback defined on my utils service here
scope.callback(); // fires alert
}
});
}
}
});
为了将参数传递回 Controller ,请执行此操作
[11:28] <revolunet> you have to send named parameters
[11:28] <revolunet> eg my-attr="callback(a, b)"
[11:29] <revolunet> in the directive: scope.callback({a:xxx, b:yyy})
关于javascript - 指令attr中的回调函数在不同的attr中定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15896985/