Javascript 按问题排列的AngularJS订单
如果这听起来很愚蠢,我很抱歉 我遇到了一个类似于的问题,虽然公认的答案有效,但它也带来了另一个问题:当我向数组添加新对象时,Angular不会渲染它Javascript 按问题排列的AngularJS订单,javascript,angularjs,Javascript,Angularjs,如果这听起来很愚蠢,我很抱歉 我遇到了一个类似于的问题,虽然公认的答案有效,但它也带来了另一个问题:当我向数组添加新对象时,Angular不会渲染它 app.controller('MainCtrl', [ '$scope', '$filter', 'posts', function($scope, $filter, posts) { $scope.posts = $filter('orderBy')(posts.posts, '-votes')
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)
})
}
]
在工厂中,只需返回http,而不是在工厂中展开承诺
o.addPost = function(post) {
return $http.post('/posts', post);
}
然后在工厂内调用addPost
方法,并捕获承诺中的承诺
app.controller('MainCtrl', [
'$scope',
'$filter',
'posts',
function($scope, $filter, posts) {
var params = {};
posts.addPost(params).then(function(data) {
$scope.posts = $filter('orderBy')(data, '-votes')
})
}
])
仅用于实例更改的角度触发器。如果您只是通过
push
或splice
修改阵列,则不会触发筛选器
您可以通过以下方法为数组
提供一个新实例
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.
})
}
好主意。尽管存在一个小问题,但您必须将承诺中的
data.data
推送到$scope.posts
中。我希望筛选器仅在视图初始化时工作。我希望筛选器仅在视图初始化时工作,而不是在后续添加时工作。这就是为什么我不在ng内部使用orderBy重复:D。谢谢,现在它可以工作了!