2016-08-04 11 views
0

Angular2サービス内でJS関数を使用しようとしていますが、requireを取得しようとするのがコンソール内の関数ではありません。私は外部のJSファイルをどのように組み込むか分かりません。それはそれを使用するサービスと同じディレクトリレベルにあります。Angular 2アプリでJavaScript関数を使用

  1. 私はdeclare文が正当だと信じています。本当ですか?
  2. 無効なrequireステートメントの処理方法がわかりません。それは
    エラーが発生し

サービスファイル "を必要機能ではありません":thaat analytics.service.ts

import { Injectable }  from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable }  from 'rxjs/Observable'; 

//how I thought i was supposed to make the JS function available 
declare var AlchemyAPI: any; 

@Injectable() 
export class AnalyticsService { 
constructor (private http: Http) {} 
getResponse() { 
    //not sure how to handle this require. I know that its not allowed 
    though 
    var AlchemyAPI = require('./alchemyapi'); 

    //instance of external JS file function 
    var alchemyapi = new AlchemyAPI(); 
    var myText = "Whoa, AlchemyAPI's Node.js SDK is really great, I can't 
     wait to build my app!"; 
    return this.http.get(alchemyapi.sentiment("text", myText, {})) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 
private extractData(res: Response) { 
    let body = res.json(); 
    console.log(body); 
    return body.data || { }; 
} 
private handleError (error: any) { 
    let errMsg = (error.message) ? error.message : 
     error.status ? `${error.status} - ${error.statusText}` : 'Server  
     error'; 
    console.error(errMsg); // log to console instead 
    return Observable.throw(errMsg); 

外部JSファイルは、リモートAPI呼び出しを行う:同じでalchemyapi.js(ディレクトリレベル)

+0

nodejの 'fs'がブラウザで動作することは確かですか? HTTPの定義も異なっているので、 'import * from '' http''を実行できます。コードをリファクタリングする必要があるかもしれません。 – Gary

答えて

0

requireを削除してJSファイルをindex.htmlのscriptタグに追加することができます。 declareは、その名前を持つvar/functionが実行時に利用できるようにtypescriptコンパイラを記述しているので、コンパイル時エラーは発生しません。

+0

それは、コンパイル時のエラーを削除しましたが、今はエラーが発生します。TS2304:名前 'AlchemyAPI'が見つかりません。おそらくクラスのインスタンス化からです。 – Joel

0

requireを使用する必要はありません。あなたは@angularrxjsで行ったようにあなたはそれをインポートすることができます:

import { AlchemyAPI } from './alchemyapi'; 

を今、あなたはあなたが望むとにかくあなたのコード内のAlchemyAPIを使用することができます。

関連する問題