从 ng-repeat 中删除元素不允许从 DOM 中删除或隐藏元素
Removing element from ng-repeat does not allow to remove or hide element from DOM
我有以下代码使用 ng-repeat 显示记录:
<div class="gallery">
<div ng-cloak
ng-repeat="photo in photos| orderBy:'-id'"
ng-mouseLeave = "delete_btn = !delete_btn"
ng-mouseEnter = "delete_btn = !delete_btn"
class="gallery_block"
id="photo_block_[[photo.id]]">
<span title="delete photo" ng-show="delete_btn" class="delete_btn_span" rel="[[photo.id]]" id="delete_photo_[[photo.id]]">
<img src="{{asset('frontend/images/cross_icon.png')}}">
</span>
<p>
<a href="javascript:;">
<img ng-click="showImagePopup([[photo.path_popup_thumbnail]]);" src={{$public_path}}./image.php?width=149&height=109&cropratio=2:1.4&image=[[photo.path_popup_thumbnail]] alt="">
</a>
{{--<span> </span>--}}
</p>
</div>
</div>
我必须删除记录,因为我首先必须使用 $http 调用函数,然后从照片数组中删除元素:
var index = $scope.photos.indexOf($('#photo_block_'+id));
$scope.photos.splice(index, 1);
然后我从 DOM 中删除元素:
$('#photo_block_'+id).remove();
更新
我已经使用 jqyery 调用了 deletePhoto 函数,如下所示:
$(".gallery").on('click','span.delete_btn_span',function()
{
$scope.deletePhoto($(elem), $(elem).attr('rel'));
});
deletePhoto 函数进一步完成删除元素等所有工作。
但它不会删除元素。所有选择器都很好。
从照片数组中删除元素会导致问题吗?
使用angular JS,你必须处理数据。所以你应该在你的跨度上放一个 ng-click="delete(photo)"
。
并在您的控制器中创建一个方法:
$scope.delete = function(photo) {
// delete froms scope.photos here...
}
从列表中删除照片。
你的代码不起作用,因为 $scope.photos.indexOf($('#photo_block_'+id))
肯定是 return -1,因为你正在寻找 $('#photo_block_'+id),这是一个 jquery 对象列表中的简单 json 对象(我想)。
所以 splice 方法做任何事情,$scope.photos 列表保持不变,所以视图没有改变,因为它是通过 ng-repeat 指令从列表构建的。
ps:你不应该从控制器操作 dom 元素,如果你需要这样做,你应该创建指令。
我有以下代码使用 ng-repeat 显示记录:
<div class="gallery">
<div ng-cloak
ng-repeat="photo in photos| orderBy:'-id'"
ng-mouseLeave = "delete_btn = !delete_btn"
ng-mouseEnter = "delete_btn = !delete_btn"
class="gallery_block"
id="photo_block_[[photo.id]]">
<span title="delete photo" ng-show="delete_btn" class="delete_btn_span" rel="[[photo.id]]" id="delete_photo_[[photo.id]]">
<img src="{{asset('frontend/images/cross_icon.png')}}">
</span>
<p>
<a href="javascript:;">
<img ng-click="showImagePopup([[photo.path_popup_thumbnail]]);" src={{$public_path}}./image.php?width=149&height=109&cropratio=2:1.4&image=[[photo.path_popup_thumbnail]] alt="">
</a>
{{--<span> </span>--}}
</p>
</div>
</div>
我必须删除记录,因为我首先必须使用 $http 调用函数,然后从照片数组中删除元素:
var index = $scope.photos.indexOf($('#photo_block_'+id));
$scope.photos.splice(index, 1);
然后我从 DOM 中删除元素:
$('#photo_block_'+id).remove();
更新 我已经使用 jqyery 调用了 deletePhoto 函数,如下所示:
$(".gallery").on('click','span.delete_btn_span',function()
{
$scope.deletePhoto($(elem), $(elem).attr('rel'));
});
deletePhoto 函数进一步完成删除元素等所有工作。 但它不会删除元素。所有选择器都很好。 从照片数组中删除元素会导致问题吗?
使用angular JS,你必须处理数据。所以你应该在你的跨度上放一个 ng-click="delete(photo)"
。
并在您的控制器中创建一个方法:
$scope.delete = function(photo) {
// delete froms scope.photos here...
}
从列表中删除照片。
你的代码不起作用,因为 $scope.photos.indexOf($('#photo_block_'+id))
肯定是 return -1,因为你正在寻找 $('#photo_block_'+id),这是一个 jquery 对象列表中的简单 json 对象(我想)。
所以 splice 方法做任何事情,$scope.photos 列表保持不变,所以视图没有改变,因为它是通过 ng-repeat 指令从列表构建的。
ps:你不应该从控制器操作 dom 元素,如果你需要这样做,你应该创建指令。