向AngularJS资源对象添加元数据

时间:2014-08-04 23:46:07

标签: javascript angularjs rest

假设我有一个类似AngularJS docs中的典型资源:

var User = $resource('/user/:userId', {userId:'@id'});

是否可以在对象中存储一些元数据,以便在另一个请求中存活?这就是我想要发生的事情:

var bob = User.get({userId: '123'});
// {id: 123, name: 'Bob'}
bob.$foo = 'foo';
// {id: 123, name: 'Bob', $foo: 'foo'}
bob.$get();
// {id: 123, name: 'Bob', $foo: 'foo'}

请注意,调用$foo后,$get字段仍然存在。

我怀疑这是不可能的。在那种情况下,哪里有更好的存储地点?

2 个答案:

答案 0 :(得分:2)

您可以创建自己的get函数来保留元数据:

User.prototype.getButKeepMetadata = function () {
  var foo = this.$foo;
  var self = this;
  this.$get(function () {
     self.$foo = foo;
  });
}

而不是bob.$get(),而是bob.getButKeepMetadata()

答案 1 :(得分:0)

你认为这是不正确的,正如你所说的那样。您可以将结果和任何更新存储在角度常量中。这将允许您在仍然发出http请求时注入它的任何控制器中都有客户端副本。

使用常量示例进行更新

http://jsfiddle.net/jonesmac82/D292w/6/

var myApp = angular.module('myApp', [
'MyCtrlModule',
'myConstant'
]);

var testCtrl = angular.module('MyCtrlModule', []);
testCtrl.controller('firstCtrl', ['$scope', 'user', function ($scope, user) {
    $scope.returnedResource = {
        fullName: 'john doe',
        userId: 123
    };
    user.username = $scope.returnedResource.fullName;
    user.userId = $scope.returnedResource.userId;
}]);

testCtrl.controller('secondCtrl', ['$scope', 'user', function ($scope, user) {
    $scope.newVariable = user.username;
}]);

var testCostant = angular.module('myConstant',[]);
testCostant.constant('user', {
    username: null,
    userId: null
});

常量是在控制器之间共享信息的好方法,可以在新的http请求数据进入时更新。

如果有帮助,请告诉我。