Angular 1.x 克隆服务
Angular 1.x clone service
例如我有 service
这样的:
services.User=function(){
var self=this;
self.obj = {
_id: "",
fullname: "",
email: "",
}
self.save = function(user){
self.obj._id=user._id;
self.obj.fullname=user.fullname;
self.obj.email=user.email;
}
}
我需要 service
或 factory
来扩展它。我试过这个:
factories.MyUser=function(User){
User.save({
_id: '123',
fullname: 'Honchar Denys',
email: 'crackeraki@gmail.com'
});
return User;
}
这并没有扩展它,而是使用它,如果我这样调用:
factories.MyPartner=function(User){
User.save({
_id: '234',
fullname: 'Honchar Maria',
email: 'margood1990@gmail.com'
});
return User;
}
两个工厂中的一个将重写另一个。 Service.User
只被调用一次,我怎样才能让它在每次调用它时都重复。最终结果是控制器中的 MyUser
和 MyPartner
注入具有相同的 .obj
对象。有没有办法angular.copy(factoryInstance)
?
从 AngularJS 工厂创建多个实例
var app = angular.module("myApp",[]);
app.factory("MyPartner", function($http){
function newPartner () {
var myParter = {};
var promise = $http.get('/api/user/myPartner');
myPartner.$promise = promise
.then ( function onFulfilled(response) {
angular.merge(myPartner, response.data);
return myPartner;
});
return myPartner;
};
return newPartner;
});
重要的是要意识到立即调用 MyPartner.newPartner
函数 returns 是一个空引用。一旦数据从服务器返回,现有引用就会填充实际数据。
MyPartner
对象有这个额外的 属性:
$promise
: 创建此实例的原始服务器交互的 promise。
成功时,promise 使用相同的资源实例或集合对象解析,并使用来自服务器的数据进行更新。这使得在 $routeProvider.when() 的 resolve 部分中使用推迟视图渲染直到资源被加载变得容易。
失败时,承诺被 http response 对象拒绝。
services.User=function(){
var self=this;
self.save = function(user){
var obj = {};
obj._id=user._id;
obj.fullname=user.fullname;
obj.email=user.email;
return obj;
}
}
在@georgeawg 的帮助下,我得出以下结论:
service.User=function(){
this.save = function(user,newUser){
user._id=newUser._id;
user.fullName=newUser.fullName;
user.email=newUser.email;
}
}
此服务将托管 shema 用户所需的所有功能。然后我们有那些工厂:
documents.MyUser=function(User){
var user = angular.copy(User);
user.obj={
_id: "123",
fullname: "Honchar Denys",
email: "crackeraki@gmail.com",
};
return user;
}
documents.MyPartner=function(User){
var user = angular.copy(User);
user.obj={
_id: "234",
fullname: "Honchar Maria",
email: "margood1990@gmail.com",
};
return user;
}
return 不同 User.obj。
例如我有 service
这样的:
services.User=function(){
var self=this;
self.obj = {
_id: "",
fullname: "",
email: "",
}
self.save = function(user){
self.obj._id=user._id;
self.obj.fullname=user.fullname;
self.obj.email=user.email;
}
}
我需要 service
或 factory
来扩展它。我试过这个:
factories.MyUser=function(User){
User.save({
_id: '123',
fullname: 'Honchar Denys',
email: 'crackeraki@gmail.com'
});
return User;
}
这并没有扩展它,而是使用它,如果我这样调用:
factories.MyPartner=function(User){
User.save({
_id: '234',
fullname: 'Honchar Maria',
email: 'margood1990@gmail.com'
});
return User;
}
两个工厂中的一个将重写另一个。 Service.User
只被调用一次,我怎样才能让它在每次调用它时都重复。最终结果是控制器中的 MyUser
和 MyPartner
注入具有相同的 .obj
对象。有没有办法angular.copy(factoryInstance)
?
从 AngularJS 工厂创建多个实例
var app = angular.module("myApp",[]);
app.factory("MyPartner", function($http){
function newPartner () {
var myParter = {};
var promise = $http.get('/api/user/myPartner');
myPartner.$promise = promise
.then ( function onFulfilled(response) {
angular.merge(myPartner, response.data);
return myPartner;
});
return myPartner;
};
return newPartner;
});
重要的是要意识到立即调用 MyPartner.newPartner
函数 returns 是一个空引用。一旦数据从服务器返回,现有引用就会填充实际数据。
MyPartner
对象有这个额外的 属性:
$promise
: 创建此实例的原始服务器交互的 promise。
成功时,promise 使用相同的资源实例或集合对象解析,并使用来自服务器的数据进行更新。这使得在 $routeProvider.when() 的 resolve 部分中使用推迟视图渲染直到资源被加载变得容易。
失败时,承诺被 http response 对象拒绝。
services.User=function(){
var self=this;
self.save = function(user){
var obj = {};
obj._id=user._id;
obj.fullname=user.fullname;
obj.email=user.email;
return obj;
}
}
在@georgeawg 的帮助下,我得出以下结论:
service.User=function(){
this.save = function(user,newUser){
user._id=newUser._id;
user.fullName=newUser.fullName;
user.email=newUser.email;
}
}
此服务将托管 shema 用户所需的所有功能。然后我们有那些工厂:
documents.MyUser=function(User){
var user = angular.copy(User);
user.obj={
_id: "123",
fullname: "Honchar Denys",
email: "crackeraki@gmail.com",
};
return user;
}
documents.MyPartner=function(User){
var user = angular.copy(User);
user.obj={
_id: "234",
fullname: "Honchar Maria",
email: "margood1990@gmail.com",
};
return user;
}
return 不同 User.obj。