在这个AngularJS代码中:
http://jsfiddle.net/edwardtanguay/xfbgjun5/8/
我有一个范围函数addCustomer()
,它不会更新范围变量score
:
.controller('mainController', function ($scope) {
$scope.customers = ['First','Second','Third'];
$scope.score = 'sdfkj';
$scope.addCustomer = function() {
$scope.score = 'this does not work';
console.log('but it obviously gets here');
}
$scope.changeIt = function() {
$scope.score = 'this works';
}
...
})
我将函数addCustomer()
作为add
传递:
return {
restrict: 'A',
scope: {
datasource: '=',
add: '&'
},
link: link
};
然后在我的指令中调用它:
function addItem() {
scope.add();
items.push('new customer');
render();
}
为什么范围函数addCustomer()
没有更新范围变量score
?
答案 0 :(得分:2)
看看你的小提琴你的问题就在这里:
element.on('click', function(event) {
if(event.target.id === 'addItem') {
addItem();
event.preventDefault();
}
});
通过做一个元素。你用角度来连接你自己的事件。这不起作用,你也需要这样做:
element.on('click', function(event) {
if(event.target.id === 'addItem') {
addItem();
event.preventDefault();
scope.$apply();
}
});
这是因为如果以这种方式构建,“点击”会发生在角度之外。您还应该研究如何构建指令,因为这不是您构建它的方式(使用html变量然后添加它)。在您的指令代码中不应该有任何html(在特定情况下期望)。