Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Angularjs 在angular fullstack应用程序中更新后单个帖子不同步_Angularjs_Mongoose_Socket.io_Yeoman - Fatal编程技术网

Angularjs 在angular fullstack应用程序中更新后单个帖子不同步

Angularjs 在angular fullstack应用程序中更新后单个帖子不同步,angularjs,mongoose,socket.io,yeoman,Angularjs,Mongoose,Socket.io,Yeoman,在我的Angular fullstack应用程序中,在我的帖子概览页面上发布帖子是有效的。问题是:当我在单个帖子页面上发布评论时,将其推到帖子并更新,我的套接字更新不起作用 我的模式: var PostSchema = new Schema({ date: { type: Date, default: Date.now }, title: String, body: String, comments: [{ name: String, body: String, date: {

在我的Angular fullstack应用程序中,在我的帖子概览页面上发布帖子是有效的。问题是:当我在单个帖子页面上发布评论时,将其推到帖子并更新,我的套接字更新不起作用

我的模式:

var PostSchema = new Schema({
  date: { type: Date, default: Date.now },
  title: String,
  body: String,
  comments: [{ name: String, body: String, date: { type: Date, default: Date.now } }],
  active: Boolean
});
控制器工作起来很有魅力

.controller('PostsCtrl', function ($scope, $http, socket) {
  $http.get('/api/posts').success(function(posts) {
    $scope.posts = posts;
    socket.syncUpdates('post', $scope.posts, function(event, post, posts) {
    });
  });

  $scope.addPost = function(){
      $http.post('/api/posts', { title: $scope.title, body: $scope.body, link: $scope.link });
      $scope.title = '';
      $scope.body = '';
      $scope.link = '';
  };
});
控制器,在我发布评论时不更新:

.controller('PostCtrl', function ($scope, $http, socket, $stateParams) {

  $http.get('/api/posts/' + $stateParams.id).success(function(post) {
    $scope.post = post;

    socket.syncUpdates('post', $scope.post);
  });

  $scope.$on('$destroy', function () {
    socket.unsyncUpdates('post');
  });

  $scope.addComment = function(){
      $http.post('/api/posts/' + $stateParams.id + '/comments', { name: "NAAM", body: "BODY" });
  };

});

注释将保存到数据库中,但需要刷新以更新ng repeat。有人能帮我吗?

您没有更新视图。试试这个

.controller('PostCtrl', function($scope, $http, socket, $stateParams) {

    // Update the view (put this in a function, so you could call it again when needed)
    function updateView(){
        $http.get('/api/posts/' + $stateParams.id).success(function(post) {
            $scope.post = post;

            socket.syncUpdates('post', $scope.post);
        });            
    }
    // Then call it, first time 
    updateView();

    $scope.addComment = function() {
        $http.post('/api/posts/' + $stateParams.id + '/comments', {
            name: "NAAM",
            body: "BODY"
        });

        // And then each time you post a comment
        updateView();
    };

});
或者,直接更新视图。我不确定$scope.post应该包含什么,但是如果它是一个数组,并且新数据是{name:NAAM,body:body},那么您可以推送它

.controller('PostCtrl', function($scope, $http, socket, $stateParams) {

    $scope.addComment = function() {
        $http.post('/api/posts/' + $stateParams.id + '/comments', {
            name: "NAAM",
            body: "BODY"
        });

        // update your view
        $scope.post.push({ name: "NAAM", body: "BODY" });
    };

});

您还可以选择直接更新视图,而无需从服务器获取。我不太清楚你的$scope.post是什么,你的socket.syncUpdates实际上是如何更新你的视图的,但是如果你能直接做到这一点,那么你确实可以通过直接更新$scope来使用“双向绑定”

这似乎是可行的。但在我看来,这不是双向绑定,对吗?在我的posts控制器中,posts是动态获取的,而我没有将$http请求包装到函数中。Angular中的术语“双向绑定”是指DOM$scope,它不包括服务器。$scope.post依赖于从服务器获取$http.get数据。