我一直在使用控制器作为语法,而不是在我的Angular项目中使用$scope
并使用指令遇到问题。我正在尝试使用指令中的scope.$apply()
在我的控制器中调用一个函数。但由于我没有在控制器中使用作用域,我收到此错误:未捕获TypeError:undefined不是函数。
我理解为什么因为范围问题,但我的问题是在我的指令中使用控制器而不是$apply
使用$scope
的正确方法是什么?
JSFiddle示例:http://jsfiddle.net/z6476omb/
angular
.module('testApp',[])
.controller('TestCtrl',TestCtrl)
.directive('updateDirective',updateDirective)
function TestCtrl() {
var vm = this;
vm.name = 'Rob'
vm.updateName = updateName;
function updateName(new_name) {
vm.name = 'Robert';
}
}
function updateDirective() {
var directive = {
link: link,
restrict:'A'
}
return directive;
function link(scope,element,attr) {
element.on('click',function() {
console.log('trying to change...');
scope.$apply(scope.updateName());
});
}
}
答案 0 :(得分:1)
一种方法是使用您使用的别名来引用控制器范围:ctrl
。
因此,在您的指令中,您可以将其称为:scope.ctrl.updateName()
请参阅此处的小提琴: