如何在AngularJS中使用$http来更新持久内存
How to, in AngularJS, use $http to update persistent memory
这段代码来自Angular入门系列视频,它解释了如何用持久化内存中的数据填充Angular控制器,但没有解释如何将新的产品评论添加到持久化内存中。
似乎确实有一些文章解释了如何做到这一点,但由于我对angular非常陌生,恐怕我无法理解其中的任何一个。
我已经弄清楚了使用$http进行post请求的语法,但我不知道如何将该代码放入现有结构中,以便它将1)在将新元素推到reviews数组时调用,以及2)完成时更新视图。
我有兴趣学习一种基本的方法,将新产品评论添加到持久记忆中。
(function() {
var app = angular.module('gemStore', ['store-directives']);
app.controller('StoreController', ['$http', function($http){
var store = this;
store.products = [];
$http.get('/store-products.json').success(function(data){
store.products = data;
});
}]);
app.controller('ReviewController', function() {
this.review = {};
this.addReview = function(product) {
product.reviews.push(this.review);
this.review = {};
};
});
})();
JSON是这样的:
[
{
"name": "Azurite",
"description": "...",
...
"reviews": []
},
...
]
如果store-products.json
只是服务器上的一个文件,则需要实际的后端实现(PHP, nodejs等)来实际更新文件(或者更典型地只是从数据库返回内容)。
通常你会做一个保存方法,而不是张贴每一个修改。但是,在任何一种情况下,取决于您的后端,通常实现就像$http.put('/store-products', store.products)
一样简单,每当您单击"保存"按钮时。通常,put可以返回相同的数据,因此通常不需要更新视图,因为只需将其精确地设置为您的状态。但是,如果您有并发编辑的可能性,并且put返回修改后的数据,那么它看起来就像get:
$http.put('/store-products', store.products).success(function(data){
store.products = data;
});
对于添加项,它可能几乎相同,这取决于您的数据模型:
$http.post('/store-products', newProduct).success(function(data){
store.products = data;
});
在本例中,POST给出一个要添加的项目并返回所有产品。如果有很多产品——也就是说,产品更像是一个大数据库,而不是一个"文档"中的小集合,那么post通常会在任何服务器处理之后返回添加的项目:
$http.post('/store-products', newProduct).success(function(newProductFromServer){
store.products.push(newProductFromServer); //if newProduct wasn't already in the array
//or, store.products[newProductIdx] = newProductFromServer
});
如果你真的想在每次修改时调用这个函数而不是保存按钮,你可以使用watch:
$scope.$watchCollection(
function() { return store.products; },
function() { /* call the $http.put or post here */ }
}
- 从$http.get调用更新Angular作用域变量
- Angular Directive在$http之后未更新
- 多久向服务器发送一次Http请求以检查更新?(Ajax)
- RxJS:在每次返回并行http请求时更新客户端
- Angular没有't在http请求后更新我的对象
- 如何进行服务器端HTTP重定向更新引用程序(更改原始引用程序)
- Angular 在 http 请求后不更新页面(范围问题?
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- 打印从 HTTP RFEquest 动态更新的页面范围
- $http AngularJS 后不更新的数据范围
- angularJS范围在HTTP get之后不会更新
- AngularJS:在成功的HTTP请求后更新指令范围
- 如何使用 ng 无限滚动并在 http.jsonp 完成后更新另一个 DOM 元素
- 操作由更新 img.src 引起的 http 请求
- AngularJS - 使用 $http 更新数组内的嵌套对象属性
- $scope变量在控制器中没有更新,在成功的$http GET请求中
- 使用$http POST方法更新textarea
- 如何使用http.post方法替换或更新文本区域中的现有内容
- AngularJS视图没有't在将$http响应分配给$scope时进行更新
- AngularJS:$http请求问题-没有为jQuery函数调用更新DOM