2017-04-19 80 views
1

我有一個Angular 2服務,意思是一些組件正在使用的打字稿類,它通過http從Web服務獲取數據。 ng服務使用Angular的http和rxjs Observable和可觀察的運算符。 我需要在完全不同的應用程序中重新使用這個ng服務,這是一個香草JS(沒有角度,沒有打字稿)。在瀏覽器中使用常規JS的Angular 2服務

是否可以僅編譯ng服務及其依賴關係(http,rxjs)並將其打包爲可在瀏覽器中使用的獨立自給式JavaScript模塊?

+0

我不明白爲什麼它可能無法正常工作 –

+0

任何原因,我該怎麼辦呢?我只是採取service.ts文件的JS輸出,並嘗試在Angular上下文外使用它?這肯定不會工作,因爲它依賴於Angular的東西,問題是我需要的其他角度的東西,如果有一個簡單的方法來打包它 – itaysk

+0

如果你使用模塊,你已經知道你需要通過檢查導入。你的服務使用依賴注入嗎? –

回答

0

您仍然可以使用現代 JavaScript。使用ECMAScript6。模塊化HTTP請求(整個應用程序容易可重複使用的)的

export default obj => { 
    return new Promise((resolve, reject) => { 
     let xhr = new XMLHttpRequest(); 
     xhr.open(obj.method || "GET", obj.url); 
     if (obj.headers) { 
      Object.keys(obj.headers).forEach(key => { 
       xhr.setRequestHeader(key, obj.headers[key]); 
      }); 
     } 
     xhr.onload =() => { 
      if (xhr.status >= 200 && xhr.status < 300) { 
       resolve(xhr.response); 
      } else { 
       reject(xhr.statusText); 
      } 
     }; 
     xhr.onerror =() => reject(xhr.statusText); 
     xhr.send(obj.body); 
    }); 
}; 

更新1:

構建您Angular2 http服務的等效在ECMAScript6有用的文檔( JavaScript):

+0

這是一個在Angular應用程序中使用JS的例子嗎?因爲我的情況恰恰相反(在JS應用程序中使用TS \ NG服務) – itaysk

+0

@itaysk這是使用ECMAScript6(JavaScript)作爲模塊構建HTTP請求的示例。沒有Angular envolved。我以爲這是你問的問題...... – SrAxi

+0

不知道我理解這個解決方案。你是否打算用這個實現來替換ng服務中的@ angular/http?或者,也許你打算使用這個而不是重用我現有的ng服務? – itaysk