默认$resource开机自检数据
Default $resource POST data
这可能很奇怪,但我需要使用模块的工厂方法为我的$resource指定一些默认的 POST 数据。
有没有人知道如何在 AngularJS 中做到这一点?
编辑:
好吧,我想做这样的事情:
/** * 模块声明。 * @type {对象} */var services = angular.module("services", ["ngResource"]);/** * 产品处理服务 */services.factory("Product", function($resource) { return $resource("http://someUrl", {}, { get : {method: "GET", params: {productId: "-1"}}, update: {method : "POST", params:{}, data: {someDataKey: someDataValue}} });});
其中数据是我将来 POST 请求的默认数据。
这不是真正有角度的方式来做这样的事情,因为如果你这样做并且它没有反映在你的模型中,你会失去数据一致性。
为什么?
资源工厂创建对象并使用对象实例数据作为 POST。我已经查看了文档和角度资源.js似乎没有办法在不修改角度资源.js的情况下为资源创建的对象指定任何默认自定义属性。
您可以做的是:
services.factory("Product", function($resource) {
return $resource("http://someUrl", {}, {
get : {method: "GET", params: {productId: "-1"}},
update: {method : "POST"}
});
});
在控制器中:
$scope.product = {}; // your product data initialization stuff
$scope.product.someDataKey = 'someDataValue'; // add your default data
var product = new Product($scope.product);
product.$update();
我认为这取决于您如何调用更新函数。如果你阅读了角度主页的教程,在"连接后端"下,mongolab.js提供了一个"项目"工厂。逐字复制:
angular.module('mongolab', ['ngResource']).
factory('Project', function($resource) {
var Project = $resource('https://api.mongolab.com/api/1/databases' +
'/angularjs/collections/projects/:id',
{ apiKey: '4f847ad3e4b08a2eed5f3b54' }, {
update: { method: 'PUT' }
}
);
Project.prototype.update = function(cb) {
return Project.update({id: this._id.$oid},
angular.extend({}, this, {_id:undefined}), cb);
};
Project.prototype.destroy = function(cb) {
return Project.remove({id: this._id.$oid}, cb);
};
return Project;
});
用法是你首先得到一个项目的实例:
project = Project.get({id:1});
然后在一些更改后进行更新:
project.update(someFunction);
在您的情况下,您可以更改更新以始终添加所需的数据:
Product.prototype.update = function(cb) {
return Product.update({},
angular.extend({}, this, {someDataKey: someDataValue}), cb);
};
否则,您很可能会将键/值对放在参数中:
update: {method : "POST", params:{someDataKey: someDataValue}}
它将与 URL 中的键/值对一起发布,但现在大多数应用程序服务器无论如何都会将该对放入 params 对象中。
大多数人都错过了这里文档中的一个小宝石。
non-GET "class" actions: Resource.action([parameters], postData, [success], [error])
这表明您可以执行以下操作。
var User = $resource('/user');
postData = { name : 'Sunil', 'surname' : 'Shantha' };
var user = User.save({notify:'true'}, postData, function() {
// success!
});
执行保存操作(发布)时的第二个参数是发布数据。
包装器函数将起作用。
function myPost(data) {
return $http.post('http://google.com', angular.extend({default: 'value'}, data))
}
myPost().success(function(response) { ... });
这可以解决你的问题吗?
services.factory("Product", function($resource) {
return $resource("http://someUrl", {}, {
get : {method: "GET", params: {productId: "-1"}},
update: {method : "POST", params:{}, data: {someDataKey: someDataValue}}
});
});
services.factory("DefaultProduct", function(Product) {
return function(){
return new Product({
data:"default";
});
};
});
services.controller("ProductCTRL",function($scope,DefaultProduct){
$scope.product = new DefaultProduct();
});
您可以将参数与默认值合并。params
中不可用的所有内容都将由默认对象提供。所有可用内容都将被myParams
覆盖
services.factory("Product", function($resource) {
return $resource("http://someUrl", {}, {
get : {method: "GET", params: {productId: "-1"}},
update: {method : "POST", params:angular.extend(myDefault, myParams);}
});
});
其中myParams
是变量列表,并将默认值myDefault
为 JSON 对象。
您可以使用 transformRequest 选项为使用 POST 方法的$resource操作设置请求的默认字段。
例如像这样的东西
function prependTransform(defaults, transform) {
// We can't guarantee that the default transformation is an array
defaults = angular.isArray(defaults) ? defaults : [defaults];
// Append the new transformation to the defaults
return [transform].concat(defaults);
}
ctrl.factory('MyResource', ['$resource', '$http',
function($resource, $http) {
return $resource('/path/to/myresource/:id', {id : '@id'},
{
create : {
method : 'POST',
transformRequest : prependTransform($http.defaults.transformRequest,
function(data, headers) {
return addDefaultField(data);
}
),
},
});
}
]);
- 开机自检无法正常工作,出现错误
- 类型错误:无法读取开机自检后未定义的属性“正文”(平均值)
- 在 AngularJS 和 CodeIgniter3 中开机自检数据时出现 CORS 错误
- html 开机自检数据未发送
- 快递.js开机自检空要求正文
- 取消选中通过开机自检 [] 中的回显选中的复选框
- 通过开机自检将 XML 发送到另一台服务器
- 控制器中的 MVC3 自动完成和开机自检方法
- 角度 UI 模式开机自检
- 控制器操作参数未从 AJAX 开机自检正确填充
- 王牌编辑器 - 通过开机自检在服务器上保存/发送会话
- ASP.NET Web API 2 - 如何开机自检
- 无法向服务器发送开机自检请求
- 默认$resource开机自检数据
- “location.reload()” 丢失了开机自检/会话数据?(F5 / Ctrl + R保留数据?
- 从服务器获取开机自检的数据不起作用
- 开机自检数据发送和更改 URL 相同
- 家长通过开机自检发送数据的弹出窗口
- MVC 4 API 控制器未接收开机自检数据
- 重定向丢失的开机自检/会话数据