javascript - 数据删除后 Angular View 不更新

标签 javascript angularjs

我正在开发一个博客应用程序,其中包含您可以选择编辑、查看或删除的帖子列表。如果您单击“删除”,该帖子应从帖子管理页面中删除。单击“删除”后,我可以看到控制台中的数据已更新,帖子数量减少了,但页面上的帖子数量只有在刷新页面后才会更新。我希望有人能够发现我的 Controller 和 View 之间的脱节。

服务器.js

router.delete('/api/posts/:post_id', function(req, res) {
    var results = [];

    // Grab data from the URL parameters
    var id = req.params.post_id;

    // Get a Postgres client from the connection pool
    pg.connect(connectionString, function(err, client, done) {
        // Handle connection errors
        if(err) {
          done();
          console.log(err);
          return res.status(500).json({ success: false, data: err});
        }

        // SQL Query > Delete Data
        client.query("DELETE FROM posts WHERE id=($1)", [id]);

        // SQL Query > Select Data
        var query = client.query("SELECT * FROM posts ORDER BY id ASC");

        // Stream results back one row at a time
        query.on('row', function(row) {
            results.push(row);
        });

        // After all data is returned, close connection and return results
        query.on('end', function() {
            done();
            return res.json(results);
        });
    });

}); 

module.exports = router;

Controller .js

// Delete post
$scope.deletePost = function(postID) {
    $http.delete('/api/posts/' + postID)
        .success(function(data) {
            $scope.postData = data;
            console.log(data);
        })
        .error(function(data) {
            console.log('Error: ' + data);
        });
};

管理.jade

(这是一个部分模板,如果您也想查看layout.jade,请告诉我)

h1 Manage posts 
br
div(class="post-list")
  div(ng-repeat='post in postsData track by $index' class="post")
    h3 Title: {{ post.title }} 
    h3 Date: {{ post.published | date: 'MMM d, y'}}
    h4 Author: {{ post.author }}
    div Post: {{ post.draft }}
    div(class="edit-buttons")
      a(href="posts/{{ post.id }}")
        button(class="btn btn-default btn-lg btn-success pull-left") View post
      a(href="posts/{{ post.id }}/edit")
        button(class="btn btn-default btn-lg btn-info pull-left") Edit post
      button(class="btn btn-default  btn-lg btn-danger pull-right" ng-click="deletePost(post.id)") Delete post

对此的任何想法都非常感谢!我是 Angular 的新手,所以如果我还缺少任何最佳实践,请告诉我。

最佳答案

View 上的

postsData 不是 Controller 中的 postData

错误代码:

Controller :

$scope.postData = data;

查看:

'post in postsData track by $index'

$scope.postData = data; 更改为 $scope.postsData = data;

此外,由于 .success/.error 已弃用,请将代码更改为使用 .then() 方法,如下所示:

$http.delete('/api/posts/' + postID).then(function(data) {
    //Success
    $scope.postsData = data;
    console.log(data);
}, function(data) {
    //Error
    console.log('Error: ' + data);
});

如果由于某种原因,您从 Angular 外部获取数据(此处不适用),那么您将需要“应用”范围,以便 View 更新。为此,您需要运行 $scope.$apply() - 尽管这通常会导致更多问题,然后再修复。大多数时候,有多种方法可以在 Angular 中执行相同的操作(使用 Angular 的 $http 而不是 JQuery - 正如您已经在做的那样,等等)

关于javascript - 数据删除后 Angular View 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34109830/

相关文章:

javascript - 如果没有 $scope.$apply 则修改范围不起作用

angularjs - 使用来自 JSON 响应的有效 ng-click 操作构建 div

javascript - Angular 重定向到其他而不检测 View 但是当我点击后退按钮时它有效

javascript - Websocket 和 telnet 连接

javascript - 使用 jQuery 单击另一个音频文件时停止音频,同时隐藏链接

javascript - 添加授权 JSONP 请求 Angular

javascript - Angular .js :13550 Error: [ngModel: nonassign]

html - CSS 列在屏幕调整大小时无法按预期工作

javascript - 使用 JavaScript 将 HTML 元素从一个列表传输到另一个列表

Javascript - 在字符串中添加缺少的括号