我可以从我的指令中调用该函数,但参数仍然作为未定义传递。
这里是指令
的一行<input ng-click="delete(0)" type="submit" id="submit" value="Delete Feed" />
这是指令
<testdirective delete="deleteFeed()"></testdirective>
这是函数
$scope.deleteFeed = function(x){
console.log(x);
$scope.tweets.splice(x, 1);
}
最后是指令本身
app.directive("testdirective", function() {
return {
restrict: "E",
templateUrl: 'app/main/tweetboard.html',
scope: {
delete:'&'
},
};
});
谢谢!
答案 0 :(得分:3)
尝试以下两件事:
使用此替换指令:
<testdirective delete="deleteFeed(feed)"></testdirective>
指令的指向行替换为
<input ng-click="delete({feed:0})" type="submit" id="submit" value="Delete Feed" />
@
绑定形式的要点是将创建一个函数包装器&amp;它将指向原始功能。
要使用参数调用原始函数,需要将对象传递给包装函数,对象的键是参数的名称。
来自官方angular docs的示例:
给定
来指定金额值<widget my-attr="count = count + value">
和小部件定义 范围:{ localFn:'&myAttr' }
,然后隔离范围属性localFn
将指向count = count + value
的函数包装器 表达。通常,从隔离范围传递数据是合乎需要的 通过表达式到父作用域,这可以通过传递一个 将局部变量名称和值映射到表达式包装器fn中。 例如,如果表达式为increment(amount)
,那么我们就可以 通过将localFn
调用为localFn({amount:22})
答案 1 :(得分:0)
尝试作为属性而不是范围
app.directive("testdirective", function() {
return {
restrict: "E",
templateUrl: 'app/main/tweetboard.html',
link: function(scope, elem, attrs) {
if(attr.deleteFeed)
scope.$apply(attr.deleteFeed);
}
};
});
HTML
<testdirective delete="deleteFeed()"></testdirective>
答案 2 :(得分:0)
以下是工作解决方案:
您忘记传入参数,因此始终未定义。
//代码在这里
var app =angular.module('test', []);
app.controller('testController', function($scope){
$scope.x = "test";
$scope.deleteFeed = function(x){
alert(x);
}
})
app.directive("testdirective", function() {
return {
restrict: "E",
template: '<input ng-click="delete(x)" type="submit" id="submit" value="Delete Feed" />',
scope: {
delete:'&'
}
};
});
答案 3 :(得分:0)
将函数中的pa-ram从指令传递给父控制器是一种简单的方法:
在父视图中:
<div menubar activatetab="cdCtrl.activateTab(id)"></div>
指令:
<div ng-click="activatetab({id:10})>Click here...</div>
在父控制器中:
$scope.activateTab(id) =function(){
alert(id);
}
希望它能为你效力!!