2016-08-04 3 views
0

Angular2 서비스에서 JS 함수를 사용하려고하지만 require를 얻는 것이 콘솔의 함수가 아닙니다. 외부 JS 파일을 포함하는 방법을 잘 모르겠습니다. 그것은 그것을 사용하는 서비스와 동일한 디렉토리 레벨에 있습니다.Angular 2 앱의 JavaScript 함수 사용

  1. 나는 선언문이 합법적이라고 믿습니다. 참된?
  2. 잘못된 require 문을 처리하는 방법을 모르겠습니다. 그것은 "함수 필요하지 않습니다"

서비스 파일
오류가 발생합니다 : 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); 
원격 API 호출하게 thaat

외부 JS 파일 : alchemyapi.js (같은시를 디렉토리 레벨)

+0

nodej의 'fs'가 브라우저에서 작동 할 확신합니까? HTTP 정의도 다르므로'http * '에서'import *'할 수 있습니다. 코드를 리팩터링해야 할 수도 있습니다. – Gary

답변

0

여러분은 index.html의 script 태그에서 require를 제거하고 JS 파일을 추가 할 수 있습니다. declare은 typescript 컴파일러가 해당 이름을 가진 var/function이 런타임에 사용 가능하므로 컴파일 타임 오류가 발생하지 않는다고 말합니다.

+0

그게, 그리고 그것은 컴파일 시간 오류를 제거했지만 지금은 오류가 발생 TS2304 : 'AlchemyAPI'이름을 찾을 수 없습니다. 아마도 클래스 인스턴스화에서 온 것입니다. – Joel

0

require을 사용할 필요가 없습니다. 당신이 @angularrxjs와 함께했던 것처럼 당신은 가져올 수 :

import { AlchemyAPI } from './alchemyapi'; 

지금 당신은 어쨌든 당신이 원하는 코드 내부 AlchemyAPI를 사용할 수 있습니다.