抱歉,如果这听起来很愚蠢。
我遇到类似于this question的问题,虽然接受的答案有效,但它也提出了另一个问题:当我向数组添加新对象时,Angular不会渲染它
app.controller('MainCtrl', [
'$scope',
'$filter',
'posts',
function($scope, $filter, posts) {
$scope.posts = $filter('orderBy')(posts.posts, '-votes')
}
]
我的添加功能:
o.addPost = function(post) {
return $http.post('/posts', post).success(function(data) {
o.posts.push(data)
})
}
我能做些什么吗?
编辑:我跟这个: o.addPost = function(post) {
return $http.post('/posts', post)
}
app.controller('MainCtrl', [
'$scope',
'$filter',
'posts',
function($scope, $filter, posts) {
$scope.posts = $filter('orderBy')(posts.posts, '-votes')
$scope.addPost = function() {
posts.addPost(param).then(function(response) {
$scope.posts.push(response.data)
})
}
]
答案 0 :(得分:4)
只返回http而不是解开工厂内的承诺
o.addPost = function(post) {
return $http.post('/posts', post);
}
然后在工厂内调用addPost
方法。并在promise中捕获promise。
app.controller('MainCtrl', [
'$scope',
'$filter',
'posts',
function($scope, $filter, posts) {
var params = {};
posts.addPost(params).then(function(data) {
$scope.posts = $filter('orderBy')(data, '-votes')
})
}
])
答案 1 :(得分:4)
仅针对实例更改的角度触发器。如果您只是按push
或splice
修改数组,则不会触发过滤器。
您可以通过以下方式为array
提供新实例。
o.addPost = function(post) {
return $http.post('/posts', post).success(function(data) {
o.posts.push(data);
o.posts = o.posts.slice(); // this will give array a new instance and fire the filter.
})
}