2016-04-07 4 views
1

Мне нужно сделать сервис, который можно использовать для разных приложений с угловым2. Эта служба будет обращаться к остальным api и обернуть свои данные, чтобы угловое приложение могло его использовать. Если я использую angular2 http service, тогда мне нужно, чтобы весь angular2 был зависимым от службы.angular2 share the http service layer

В настоящее время я хочу иметь сервисный уровень как отдельный пакет npm, чтобы я мог повторно использовать его между несколькими проектами.

Есть ли лучший способ добиться повторного использования и не установить всю библиотеку angular2 в пакет услуг?

+0

Таким образом, служба имеет «угловую» зависимость от npm, которая совместно используется родительским пакетом (проектом). В чем проблема? Очевидно, что сервис не должен компилироваться, чтобы иметь возможность использовать тот же «угловой», что и проект. Поскольку служба не предназначена для использования в неграмотной среде, она должна быть такой простой. – estus

+0

@estus обслуживание - другой упаковка. Поэтому я хочу иметь возможность использовать только http, а не все угловые2, если это возможно. Конечно, я могу установить весь ng2, а проект - ng2, и он будет установлен только один раз. –

+0

Но служба размещена в приложении, не так ли? Затем введенный «Http» будет поступать из инжектора приложения. Пакет услуг даже не должен иметь зависимость от npm «угловой» (даже если он имеет, «импорт ... из« углового2/http'' в пакете услуг, скорее всего, будет разрешен к тому же «угловому2/http», как в пакете проекта , вот как работают пакеты npm). Вопрос неясен в его нынешнем состоянии и не имеет фактического кода, но похоже, что здесь нет проблем. – estus

ответ

1
  • Вам не нужно использовать Http углам главного. Вы можете создать свой собственный класс, который вызывает XMLHttpRequest или использует fetch API напрямую или любую другую библиотеку, которая выполняет запросы AJAX.

  • Угловые будут двигаться Http к его собственной упаковке (из основного репозитория Angular2) https://github.com/angular/http (незавершенный)

  • Вы можете создавать интерфейсы в вашем слое службы HTTP, которые соответствуют общественному API из Http, а затем передать экземпляр Http в службу, когда вы загрузите свое угловое приложение.

interface MyHttp { 
    get(url: string, options?: RequestOptionsArgs): Observable<Response>; 
    ... 
} 

let myHttpService = new MyHttpService(); 

bootstrap(AppComponent1, [ 
    HTTP_PROVIDERS, 
    provide(MyHttpService, { 
     deps: [Http], 
     useFactory: (http) => { 
      if(!myHttpService.http) { 
      myService.http = http; 
      } 
      return myService; 
     }) 
    })] 
); 

то в ваших компонентов и услуг использовать его как

export class MyComponent { 
    constructor(private _myHttp: MyHttpService) { 
    this._myHttp.doSomething(); 
    } 
} 

Подсказка: Если вы хотите, чтобы ввести свой MyHttpService в качестве замены Http (компонентов и услуг из ваш контроль, который запрашивает Http, используйте ваш MyHttpService) поставщик услуг должен выглядеть по-другому.

+0

В соответствии с угловым2 http-репо его статус неактивен. Я понимаю, что вы можете использовать свой собственный сервис. Но у angular2 есть инфраструктура насмешек и тестирования всего этого. И angular2 в основном построен с угловыми сервисами, такими как http. Таким образом, использование вашего собственного пути с угловым2 странно, как его каркас, который предполагает, что вы делаете это угловым способом. Что мне не хватает? –