2016-04-22 2 views
2

Я пытаюсь включить внешнюю библиотеку js в мое приложение AngularJs 2 и попытаюсь сделать все методы в этом js-файле в качестве службы в приложении Angularjs 2.Как включить внешние js-библиотеки в AngularJs 2?

Например: позволяет указать файл my js.

var hello = { 
    helloworld : function(){ 
     console.log('helloworld'); 
    }, 
    gmorning : function(){ 
     console.log('good morning'); 
    } 
} 

Так что я пытаюсь использовать этот JS файл и использовать все методы этого объекта и добавить его в сервис, так что моя служба имеет открытые методы, которые, в свою очередь, называет это Js методы. Я пытаюсь повторно использовать код, не переопределяя все методы в моем приложении на основе скриптов Angularjs 2. Я зависим от внешней библиотеки, которую я не могу изменить. Пожалуйста, помогите, спасибо заранее.

+0

Что вы можете реализовать свое приложение: es5 или es6? какой модуль загрузчик, если таковой имеется? –

+0

ES6 и я использую system.js в качестве загрузчика модулей – Vijith

ответ

1

С ES6, вы можете экспортировать переменную:

export var hello = { 
    (...) 
}; 

и импортировать его, как это в другой модуль:

import {hello} from './hello-module'; 

в предположении, что первый модуль расположен в файл hello-module.js и в той же папке, что и вторая. Нет необходимости иметь их в одной папке (вы можете сделать что-то вроде этого: import {hello} from '../folder/hello-module';). Важно то, что папка правильно обрабатывается SystemJS (например, с конфигурацией в блоке packages).

+0

Привет, пожалуйста, что делать, если я хочу сделать то же самое в es5? без использования экспорта. Это то, что если я зависим от внешних библиотек, которые я не могу изменить? – Vijith

+0

В противном случае вы включаете файл в тег 'script', но ваша переменная' hello' будет глобальной :-(. Большинство внешних библиотек поддерживают диспетчер модуля, такой как commonjs или systemjs. Обратите внимание, что вы можете настроить совместимый со стандартом модуль в systemjs. Какие внешние библиотеки вы хотите использовать? –

+1

Кажется, что strophe.js поддерживает amd для загрузчика модуля (который поддерживается системамиjs). Вы можете попробовать использовать эту конфигурацию: 'System.config ({map: {'strophe.js ':' node_modules/strophe.js/strophe.js '}}); ' –

1

При использовании внешних библиотек, загружаемых в браузер извне (например, с помощью index.html), вам просто нужно сказать, что ваши сервисы/компонент, которые они определены, «объявляют», а затем просто используют его. Например, я недавно использовал socket.io в своем компоненте angular2:

import { Component, Input, Observable, AfterContentInit } from angular2/angular2'; 
import { Http } from 'angular2/http'; 

//needed to use socket.io! io is globally known by the browser! 
declare var io:any; 

@Component({ 
    selector: 'my-weather-cmp', 
    template: `...` 
}) 
export class WeatherComp implements AfterContentInit{ 
    //the socket.io connection 
    public weather:any; 
    //the temperature stream as Observable 
    public temperature:Observable<number>; 

    //@Input() isn't set yet 
    constructor(public http: Http) { 
     const BASE_URL = 'ws://'+location.hostname+':'+location.port; 
     this.weather = io(BASE_URL+'/weather'); 
     //log any messages from the message event of socket.io 
     this.weather.on('message', (data:any) =>{ 
     console.log(data); 
     }); 
    } 

    //@Input() is set now! 
    ngAfterContentInit():void { 
     //add Observable 
     this.temperature = Observable.fromEvent(this.weather, this.city); 
    } 
} 
+1

Этот комментарий к аналогичному вопрос дает лучший ответ: http://stackoverflow.com/a/35799163/5271798 – DeusProx

+0

Благодарю вас за ответ. Я попробовал аналогичный подход, и это сработало. Но проблема в том, что socket.io всемирно известен :( – Vijith

Смежные вопросы