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

我需要 servicefactory 来扩展它。我试过这个:

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 只被调用一次,我怎样才能让它在每次调用它时都重复。最终结果是控制器中的 MyUserMyPartner 注入具有相同的 .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。