我正在使用带有mongoose的NodeJS,ANgularJS和MongoDB
这是我的模特:
var PostSchema = new mongoose.Schema({
nomReseau : String,
corps : String,
etat : String,
section : String
});
我有一个改变属性etat的函数:
$scope.passer = function(index){
var post = $scope.posts[index];
post.etat = "enCours";
Posts.update({id: post._id}, post);
$scope.editing[index] = false;
}
我在我的数据库中使用了ng-repeat for show object:
<ul>
<li ng-repeat="post in posts ">
<p>
<a ng-show="!editing[$index]" href="#/{{post._id}}">{{post.corps}}</a>
</p>
<button ng-show="!editing[$index]" ng-click="passer($index)">Passer</button>
</li>
</ul>
我可以看到我的数据库中的所有帖子,当我点击按钮时,这完全适用于属性etat更改,一切都很好。
但是当我在ng-repeat中添加一个过滤器时,就像这样:
<li ng-repeat="post in posts | filter:{ etat:'aTraiter'} ">
过滤器工作得很好我发布了所有的etat属性:'aTraiter'
但是,如果我点击我的上一个按钮并更改属性etat没有任何变化,我尝试使用其他功能,他们都可以使用过滤器,但是当我说它没什么用。
答案 0 :(得分:0)
您是否有任何访问$scope.editing
的控制器/服务?如果是这样,您可能将$scope.editing[$index]
设置为等于之前的状态,其中它不等于false。您可能还想考虑您假设$scope.editing[$index]
将是一个布尔值。如果它有任何其他类型,如字符串或数字,那么它将评估为true。
否则您的所有结果都没有etat属性等于&#39; aTraiter&#39;所以他们没有表现出来。你有没有证实他们中的任何一个确实有etat等于&#39; aTraiter&#39;。您可能正在其他地方更改该值。可能来自Passer功能
答案 1 :(得分:0)
AngularJS v1.4中存在错误,在某些情况下ng-repeat会中断。我升级到v1.6并且它消失了。
答案 2 :(得分:0)
问题是,如果显示的数据较少,$index
会发生变化(因为您正在过滤)。您可以直接使用post
变量
ng-click="passer(post)"
你的功能应该是
$scope.passer = function(post){
post.etat = "enCours";
Posts.update({id: post._id}, post);
var index = $scope.posts.findIndex(function(p) { /* comparison to get original index */ }); /* keep in mind findIndex is not supported on IE, you might want to use filter or for loop instead) */
$scope.editing[index] = false;
}
你可以直接处理post变量的编辑。所以在你的路人功能中你可以这样做
post.editing = false;
并在您的视图中
ng-show="!post.editing"
这样您就不会使用$index
,并且可以防止过滤器更新所有问题