提问人:Alexey Kolchin 提问时间:12/11/2020 最后编辑:Titus Sutio FanpulaAlexey Kolchin 更新时间:12/11/2020 访问量:64
带数组的 angular 和 changling dom 树
Angular and changling dom tree with array
问:
我在angular中有html组件。模板是
<tr ng-repeat="item in documentList track by $index">
<td>{{item.TYPE}}</td>
<td>{{item.DATE_CREATE}}</td>
<td>
<a type="button" class="btn btn-default" ng-click="delDocument(item)">Delete</a>
</td>
</tr>
delDocument(item) 方法是
$scope.delDocument = function(item){
if(confirm('Do you really want to delete document?')) {
$.ajax('/ajax/del_document.php', {
'method': 'POST',
'data': {
'id': item.ID,
},
'success': function(){
i = 0;
while(i<$scope.documentList.length) {
if($scope.documentList[i].ID===item.ID) {
$scope.documentList.slice(i, 1);
}
i++;
}
}
});
}
}
所以我预计当用户按下删除按钮时,ajax 会删除后端的元素,然后 documentList 会发生变化,然后角度会改变 dom 树。但事实并非如此:documentList 正在更改,但 html 页面仍然相同。 为什么会这样?我做错了什么?
答:
2赞
Viral Patel
12/11/2020
#1
执行操作后,尝试在成功函数中使用。$scope.$apply()
$scope.delDocument = function(item){
if(confirm('Do you really want to delete document?')) {
$.ajax('/ajax/del_document.php', {
'method': 'POST',
'data': {
'id': item.ID,
},
'success': function(){
i = 0;
while(i<$scope.documentList.length) {
if($scope.documentList[i].ID===item.ID) {
$scope.documentList.slice(i, 1);
}
i++;
}
$scope.$apply();
// or blow is a safe way to use $scope.$apply();
// if($scope.$$phase){
// $scope.$apply();
// }
}
});
}
}
评论
0赞
Alexey Kolchin
12/11/2020
谢谢,它有效(但使用 if($scope.$$phase) 它没有)
0赞
Viral Patel
12/14/2020
(!$scope.$$phase) 是一种反模式。如果您以正确的方式使用,您根本不需要它。$scope.$apply()
$scope.$apply
评论