2017-08-03 114 views
3

我想创建一个工厂的新实例,但是,它总是打印最后一个实例(因为它的单例)。 我每次用new关键字创建新实例时如何获得新实例? 我在jsfiddle.net中创建了一个我想要实现的例子 谢谢。角厂。如何创建工厂的新实例?

angular.module('mainModule', []); 

    Crud.$inject = ['$http']; 

    function Crud($http) { 

     function CrudFactory(crudDTO) { 
      var vm = CrudFactory; 
         vm.x = 1; 
      vm.addX = addX; 
      vm.getX = getX; 
      vm.print = print; 

      function addX(){ 
       vm.x +=1; 
      } 
      function getX(){ 

       return vm.x; 
      } 
      function print(){ 
       console.log(crudDTO.entity); 
      } 

      return vm; 
     } 

     return CrudFactory; 
    } 

    angular 
     .module('mainModule') 
     .factory('Crud', Crud); 


    angular.module('mainModule').controller('mainCtrl', function($scope,Crud){ 
    var a = new Crud({entity:"test1"}); 
    var b = new Crud({entity:"test2"}); 
    //a.addX(); 
    //$scope.a =b.getX(); 
    a.print(); 
    b.print(); 
    a.print(); 
}); 
+0

更改虚拟机将该 – Vivz

+0

[非单S的可能的复制在Angular中的服务](https://stackoverflow.com/questions/16626075/non-singleton-services-in-angular) – Mistalis

+0

vm应该在控制器中使用;对于我在工厂中使用它没有任何意义(我们将view/tpl和model绑定在控制器中)。 –

回答

2

您正在引用它错误。您必须使用this引用被调用函数的实例,而不是再次使用函数名称。

相反

var vm = CrudFactory; 

变化

var vm = this; 

工作演示:从CrudFactory

http://jsfiddle.net/haqL7m5q/2/

+0

如果工厂是单身人士,如何创建新实例? –

+0

您可以查看此链接了解更多详情https://stackoverflow.com/questions/16626075/non-singleton-services-in-angular?检查小提琴,看看我们如何使用对象来触发工厂中的功能 – Vivz