2017-08-03 81 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