Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按问题排列的AngularJS订单_Javascript_Angularjs - Fatal编程技术网

Javascript 按问题排列的AngularJS订单

Javascript 按问题排列的AngularJS订单,javascript,angularjs,Javascript,Angularjs,如果这听起来很愚蠢,我很抱歉 我遇到了一个类似于的问题,虽然公认的答案有效,但它也带来了另一个问题:当我向数组添加新对象时,Angular不会渲染它 app.controller('MainCtrl', [ '$scope', '$filter', 'posts', function($scope, $filter, posts) { $scope.posts = $filter('orderBy')(posts.posts, '-votes')

如果这听起来很愚蠢,我很抱歉

我遇到了一个类似于的问题,虽然公认的答案有效,但它也带来了另一个问题:当我向数组添加新对象时,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)
      })
    }
  ]

在工厂中,只需返回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。谢谢,现在它可以工作了!