在 angular-fullstack 应用程序中更新后单个 post 不同步
Single post not synching after updating in angular-fullstack app
在我的 Angular-fullstack 应用程序中,posting posts 在我的 post 概览页面上有效。问题是:当我 post 在单个 post 页面上发表评论(将其推送到 post 并更新)时,我的套接字更新不起作用。
我的架构:
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
});
posts.controller(很有魅力)
.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 = '';
};
});
post.controller,当我 post 评论时不更新:
.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
实际上是如何更新您的视图的,但是如果您能够直接做到这一点,那么您确实会使用 'two-way binding'直接更新 $scope
在我的 Angular-fullstack 应用程序中,posting posts 在我的 post 概览页面上有效。问题是:当我 post 在单个 post 页面上发表评论(将其推送到 post 并更新)时,我的套接字更新不起作用。
我的架构:
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
});
posts.controller(很有魅力)
.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 = '';
};
});
post.controller,当我 post 评论时不更新:
.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
实际上是如何更新您的视图的,但是如果您能够直接做到这一点,那么您确实会使用 'two-way binding'直接更新 $scope