假设我有一个类似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
字段仍然存在。
我怀疑这是不可能的。在那种情况下,哪里有更好的存储地点?
答案 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请求数据进入时更新。
如果有帮助,请告诉我。