2017-03-20 108 views
0

我有一個使用純JS類需要採用了棱角分明與requirejs

//a.js 
(function() { 
    define(function() { 
     var vaz = function(dependency){ 
      var myFact = function(){ 
       // doing a new Dependency(); 
      } 
      return myFact; 
     }; 

     return ['dependency',vaz]; 
    }); 

}()); 

現在我創建一個角模塊:

define([<a.js>], function(A){ 
     var mod = angular.module('myMod'); 
     mod.factory("myFact", A); 
     mod.run([function(){ 
     new A() // gives an error 'A is not a constructor' 
     new A[1]() //gives an error 'dependency is not a constructor' 
     }]) 
    }) 

這給了我一個錯誤說一個不是構造函數因爲它是遺留代碼,所以我不允許修改a.js. 請幫忙。

+0

'A'沒有在'mod.factory(「myFact」,A)中定義;' – n00dl3

回答

0

如果依賴的原型有constructor屬性設置正確,這應該工作:

define([<a.js>], function(A){ 
     var mod = angular.module('myMod'); 
     mod.factory("myFact", A); 
     mod.run(['$injector', function[function($injector){ 
     var dep = $injector.get("dependency"); 
     var new A[1](dep.constructor); 
     }]) 
    }) 

但如果情況並非如此,你將不能夠做到這一點無需修改遺留代碼。 (也許你可以在dependency的原型上設置構造函數屬性,而沒有太多的副作用)

+0

m試圖獲得構造函數,但m得到一個數組..即使我嘗試給[1],從B類繼承,也返回一個數組 – gurlInTheDark

+0

「m試圖獲得一個構造函數,但得到一個數組..」你可以'從$ injector.get(「myFact」)得到一個數組,除非myFact返回一個數組,「即使我試圖給出一個[1]」,它仍然不是一個字符串。你將**從不**從'$ injector.get'獲得一個構造函數。 – n00dl3

+0

我明白我們不會從injector.get()得到構造函數。我修改了代碼...我只是說做了上面的事情也沒有給我任何結果。 我需要幫助創建一個類似的設置構造函數。 – gurlInTheDark