我正在使用ocModal指令+服务(https://github.com/ocombe/ocModal)。当有人想要删除记录时,他们会点击删除按钮,该按钮会通过ocModal弹出一个模式进行确认。
oc-modal-close ng-click="deleteNote(id)"
到目前为止一切顺利。在控制器内,deleteNote运行。 Console.log显示参数是我传递的id。我调用API来删除数据库中的注释,并成功调用一个函数来删除Angular变量$ scope.notes中的注释。
$scope.removeNote = function(id){
console.log(id);
console.log($scope.notes);
delete $scope.notes[id];
console.log($scope.notes);
};
id是正确的,删除命令后的$ scope.notes表明它已被正确删除。然而,我的前端没有相应的更新。根据我在Stackover上看到的建议,我使用apply()导致'正在进行的消化周期'错误。然后我尝试使用$ timeout但是当它消除了摘要周期错误时,它没有解决绑定问题。
是否相关的是,$ scope.notes由ng-repeat使用然后使用指令?我已经尝试了一下,不这么认为,但为了以防万一,想要提一下。
答案 0 :(得分:1)
你从哪里调用$ scope.removeNote?它来自您的主控制器还是模态控制器?可能是一个指令? 感觉就像是在达到了错误的范围。您可以尝试将注释移动到$ scope。 model .notes并查看它是否有用,因为它将确保引用正确的范围,但除非您尝试提供一个小提琴,否则很难说问题发生了。 我已经创建了这个简单的小提琴试图模仿一个带有$ timeout的API调用并且它有效 - > http://jsfiddle.net/7eqsc/1/
angular.module('myApp',[])
.controller('myCtrl',function($scope,$timeout){
$scope.notes={
a:'AngularJS',
b:'Rocks'
}
$scope.addRandom=function(){
$scope.notes[parseInt(Math.random()*10000).toString(36)]='New Item';
}
$scope.removeNote=function(id){
//emulate API call
$timeout(function(){
delete $scope.notes[id];
},2000);
}
});
一般情况下,我建议将内容放在一个对象下,例如“.model。 yourArray ”,它可以确保正确保存引用并为您节省很多麻烦。