2014-07-24 62 views
0

具體來說,我正在使用一個~800行SCORM API包裝庫,以方便與LMS進行通信。作者沒有寫在Angular中。一個傳統的,香草js文件(index.js)已經被包裝在它的頂部,我包括了一個片段,以給出這裏使用的結構的概念。如何使用舊版JavaScript庫作爲Angular服務的作用域依賴項?

SCORM = {           //Define the SCORM object 
    version: null,        //Store SCORM version. 
    handleCompletionStatus: true,     //Whether or not the wrapper should automatically handle the initial completion status 
    handleExitMode: true,       //Whether or not the wrapper should automatically handle the exit mode 
    API:  { handle: null, 
        isFound: false }     //Create API child object 


}; 
SCORM.API.get = function(){ //implementation}; 
SCORM.API.set = function(){ //implementation}; 

最重要的是一個遺留的JavaScript文件,它在全局範圍內執行。

index.js

var scorm = SCORM; 
var interval; 
var channel; 
function init(){ 
    scorm.version 
} 
function get(params){ 
    var values; 
    values = getFromLMS(params); 
    return values; 
} 
function set(param, value){ 
    return scorm.set(param, value); 
    return callSucceeded; 
} 

我寫在角綠地的應用程序,但我想利用一些現有的外部庫在我的建築。我真的很想將index.js的功能作爲一個Angular服務公開,而不必完全重寫它。

如果我給你上面提到的兩個JavaScript文件,並且具有下列結構

'use strict'; 

var learnerServices = angular.module('learnerServices', []); 

learnerServices.factory('learner-service' [ 
    function(){ 

     }); 
    } 
]); 

你將如何注入新的services.js文件中的「獲取」,並從指數「設定」功能.js納入學習者服務的範圍?

回答

1

希望我理解正確你的問題......

'use strict'; 
var learnerServices = angular.module('learnerServices', []); 

learnerServices.factory('scormService' [ 
    function() { 

    var scorm = SCORM; 
    var interval; 
    var channel; 
    function init(){ 
     scorm.version 
    } 
    function get(params){ 
     var values; 
     values = getFromLMS(params); 
     return values; 
    } 
    function set(param, value){ 
     return scorm.set(param, value); 
     return callSucceeded; 
    } 

    return { 
    scorm: scorm, 
    interval: interval, 
    channel: channel, 
    init: init, 
    get: get, 
    set: set 
    } 
    }); 
]); 

learnerServices.factory('learnerService' ['scormService' 
    function(scormService){ 
    scormService.get('some param'); 
    }); 

]); 
+0

也許這是最好的方式,我要去上班那到測試不久。但是,我特別想找的是一種方法,從我的angular learnerService中引用index.js中的現有代碼(即無副本/粘貼)。爲了說明另一種方式,我想創建一個角度服務作爲遺留代碼的適配器,通過將API暴露給角度範圍的上下文而不實現其內部。 –

+0

也許我只是在想它,應該只是將遺留的內部元件複製到我的工廠中,就像您在回覆中所做的那樣。 –

+0

是的,你可以使用工廠作爲包裝。但是你需要返回一個暴露你想從外部訪問的變量/函數的對象。 – Andrew

相關問題