我有一个接受对象作为参数的指令。我想将对象或返回对象的方法传递给此参数。
您可以view on JsFiddle这是代码:
HTML
<div ng-controller="Ctrl as vm">
<my-directive user="{id: 1, name: 'Mike'}"></my-directive>
<my-directive user="vm.getUser()"></my-directive>
</div>
JS
var app = angular.module('myApp', []);
app.controller('Ctrl', function() {
var vm = this;
this.getUser = function() {
return {id: 2, name: 'John'};
};
})
app.directive('myDirective', function() {
return {
bindToController: {
user: '='
},
controller: function() {
var vm = this;
},
controllerAs: 'vm',
replace: true,
restrict: 'EA',
scope: {},
template: '<div>Name: {{vm.user.name}}</div>'
};
});
如果我像上面一样将参数的类型设置为 =
,则会收到以下错误:
Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
<小时/>
实现我所追求的目标的正确方法是什么?
最佳答案
为指令设置两个参数,一个用于 obj,另一个用于函数,并在 Controller 中检查哪个参数有数据:
<my-directive userObject="{id: 1, name: 'Mike'}" userFunction="vm.getUser()"></my-directive>
Controller 会像这样:
controller: function() {
if($scope.userObject){
//do something ...
}else if ($scope.userFunction){
//do something else ...
}
}
关于javascript - AngularJS - 接受对象或方法的指令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46668949/