好的......我现在觉得自己真的很蠢。请忽略我的问题。这个例子在fiddler中起作用,所以它确实是其他地方的问题。我本来想尝试解决这个问题。谢谢。修复了它...我上面有一行代码,使用$ resource服务创建一个新的$ scope.group对象,它取代了原来的$ scope.group.admin。我稍后会删除此问题
JsFiddler:http://jsfiddle.net/ovLzwez7/
我会稍微修改一下我的问题,因为这是一个范围问题。
在我的控制器中,我有这些
$scope.group = {}
$scope.group.admin = [7,8];
//Works
console.log($scope.group.admin) //[7,8]
$scope.group.admin.push(7);
console.log($scope.group.admin) //[7,8,7]
//Doesn't work
$scope.createGroup = function(){
console.log($scope.group.admin) //undefined
$scope.group.admin.push(7);
//TypeError: Cannot read property 'push' of undefined
console.log($scope.group.admin) //doesn't print to output, program ends because of the error above
}
$scope.createGroup();
在加载控制器时立即调用createGroup。它看起来像在createGroup()中,$ scope.group.admin不是数组(未定义)。有人可以解释这个范围问题以及我如何克服这个问题?在这个例子中,(抱歉突然改变),我没有操纵任何html,我只是使用console.log和一个即时加载的函数。我认为$ scope是一个单例。那么它不应该引用相同的$ scope吗?
答案 0 :(得分:0)
你应该使用ng-keypress
指令来触发绑定到范围的角度方法。
<input name="username" ng-keypress="createGroup($event)">
$scope.createGroup = function(event){
if(e.which === 13) {
$scope.addAdmin(7234)
}
}
答案 1 :(得分:0)
下面的代码是$ scope.apply它是简单的javascript代码,它不符合角度标准,因此您需要使用ng-keypress或使用$ scope.apply()函数使其工作。
addAdmin.addEventListener('keyup', function(e){
// If the key enter pressed (13) then add to list
if(e.keyCode === 13) {
$scope.addAdmin(7234)
}
})
}
如何使用$ scope。$ apply(): -
addAdmin.addEventListener('keyup', function(e){
// If the key enter pressed (13) then add to list
if(e.keyCode === 13) {
$scope.apply(function(){
$scope.addAdmin(7234)
}
});
})
}