Javascript AngularJS newly push()';ed项目到ngRepeat$Scope不';不能有效地编辑或删除

Javascript AngularJS newly push()';ed项目到ngRepeat$Scope不';不能有效地编辑或删除,javascript,angularjs,angularjs-scope,angularjs-ng-repeat,angularjs-filter,Javascript,Angularjs,Angularjs Scope,Angularjs Ng Repeat,Angularjs Filter,我使用Angularjs已经有一段时间了,遇到了一个奇怪的问题 Im将返回的数据呈现到一个ng repeat中,我能够列出按项目id排序的数据,从而首先显示最新的数据。但是,当我创建了一个add函数来插入一个新项目并使用push时,随后的项目被添加到列表的底部(当它需要位于顶部时),这没什么大不了的,因为我刚刚创建了一个orderBy过滤器: data-ng-repeat="post in posts | orderBy:'_id':true" 这样做的技巧,当一个新项目是添加宾果,它是有效的

我使用Angularjs已经有一段时间了,遇到了一个奇怪的问题

Im将返回的数据呈现到一个
ng repeat
中,我能够列出按项目id排序的数据,从而首先显示最新的数据。但是,当我创建了一个add函数来插入一个新项目并使用
push
时,随后的项目被添加到列表的底部(当它需要位于顶部时),这没什么大不了的,因为我刚刚创建了一个orderBy过滤器:

data-ng-repeat="post in posts | orderBy:'_id':true"
这样做的技巧,当一个新项目是添加宾果,它是有效的前置到ng重复列表。但是(这里是棘手的部分)包括新添加的项目在内的每个项目都可以被编辑和删除。这是通过以下方式实现的:

// within ng-repeat
ng-click="deletePost($index,post._id)" 

// Subséquent function
$scope.deletePost = function(idx, id) {
    // Delete Post
    Blog.Post.delete({ id:id }, function(success) {
        $scope.posts.splice(idx, 1);
    })
}
上述操作实际上会从数据库中删除该项,但在ng repeat列表中,它会删除要删除的所需项下面的项。以前有人遇到过这个问题吗?或者可能的解决办法

这可能与
跟踪方式有关吗


还有一点需要注意的是,如果我完全删除了
orderBy
过滤器,那么删除和编辑会有效地工作。但是我又回到了开始的地方,新添加的项目会附加到底部,而不是顶部。

不要按索引删除项目可能是您的$scope.posts顺序和呈现顺序不一样。当您使用orderBy filter ng重复为渲染创建新数组时,不要对$scope.posts重新排序

您可以根据其id删除项目。这样更安全

var index;
$filter($scope.posts, function(val, key){
    if(val._id === id && !index)
        index = key;
})
if(index){
    $scope.posts.splice(index, 1);
}

另外,如果您想首先显示插入的行,您应该使用unshift而不是push

,原因是
$scope.posts
与带有orderBy的ng重复项相比,具有原始顺序的项。Orderby筛选器重新排列项目,返回一个新数组并在其上重复,而不是在原始的
$scope.posts
数组上重复。因此,如果原始顺序与已排序的顺序不同,则索引将不同

我相信你做的太多了,只需按原样传递对象,并从原始列表中获取用于拼接的索引

只需从ng传递帖子,单击:

ng-click="deletePost(post)" 
在控制器中:

$scope.deletePost = function(post) { //Get post object
    var posts = $scope.posts;
    /*Delete with the _id property*/
    Blog.Post.delete({ id:post._id }, function(success) {
        /*Get the original index with the object reference and splice it*/
        posts.splice(posts.indexOf(post), 1);
    });
}
angular.module('app',[]).controller('ctrl',function($scope){
$scope.posts=[{
_id:'id1',
姓名:“Post1”
}, {
_id:'id2',
姓名:'Post2'
}, {
_id:'id3',
姓名:“Post3”
}, {
_id:'id4',
姓名:“Post4”
}]
$scope.deletePost=函数(post){
var posts=$scope.posts;
柱体拼接(柱体索引)1;
}
$scope.addPost=函数(){
var posts=$scope.posts;
推({
_id:'id'+(posts.length+1),
名称:'Post'+(posts.length+1)
});
}
});

添加
{{post.name}

解除束缚伙伴的良好呼叫:)