默认$资源POST数据

这可能很奇怪,但我需要使用模块的工厂方法为我的$资源指定一些默认POST数据。

有没有人有一个想法如何在AngularJS中做到这一点?

编辑:

那么,我想要做这样的事情:

/**
 * Module declaration.
 * @type {Object}
 */
var services = angular.module("services", ["ngResource"]);

/**
 * Product handler service
 */
services.factory("Product", function($resource) {
    return $resource("http://someUrl", {}, {
        get   : {method: "GET", params: {productId: "-1"}},
        update: {method : "POST", params:{}, data: {someDataKey: someDataValue}}
    });
});

数据是我未来POST请求的默认数据。


这并不是真正做这种事情的角度,因为如果你这样做了,并且它没有在你的模型中反映出来,你就会失去数据一致性。

为什么?

资源工厂创建该对象并将对象实例数据用作POST。 我已经看过文档和angular-resource.js,似乎没有一种方法可以为资源创建的对象指定任何默认自定义属性,而无需修改angular-resource.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提供了一个'Project'工厂。 逐字复印:

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);
};

否则,你可能很可能把键/值对放在params中:

    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!
});

进行保存操作时(post)的第二个参数是发布数据。

链接地址: http://www.djcxy.com/p/13597.html

上一篇: Default $resource POST data

下一篇: AngularJS routing causes 404