2015-12-30 4 views
2

Angular2, теперь в бета-версии, моя компания решает работать над этим немного. Я попытался установить запрос с моей службы. Я просматриваю весь интернет, но ничего не работает. (Возможно, сообщения были написаны до выпуска Beta).HTTP PROVIDERS in @Injectable Service

Итак, у меня есть boot.ts так:

import {bootstrap} from 'angular2/platform/browser'; 
 
import {Component, provide} from 'angular2/core'; 
 
import {HTTP_PROVIDERS} from 'angular2/http'; 
 

 
import {BrandsComponent} from './brands/brands.component'; 
 
import {BrandsService} from './brands/brands.service'; 
 

 
@Component({ 
 
\t selector: 'my-app', 
 
\t template: ` 
 
\t \t <brands></brands> 
 
\t `, 
 
\t directives: [BrandsComponent] 
 
}) 
 

 
export class AppComponent { 
 
} 
 

 

 
bootstrap(AppComponent, [HTTP_PROVIDERS, BrandsService]);

Мой BrandsComponent впрыснуть мою BrandsService. Вот мой код услуги:

import {Http} from 'angular2/http'; 
 
import {Injectable, Inject} from 'angular2/core'; 
 

 
@Injectable() 
 
export class BrandsService{ 
 
\t constructor(public http: Http) { 
 
\t \t console.log('Task Service created.', http); 
 
\t \t http.get('http://google.fr'); 
 
\t } 
 

 
\t getBrands(){ 
 
\t \t //return this.http.get('./brands.json'); 
 
\t \t return []; 
 
\t } 
 
}

В моей консоли, у меня есть «Целевой сервис создан» журнал, но любой запрос Ajax собирается.

Я не могу сказать вам, что я пробовал, потому что я меняю свой код примерно в миллиард раз.

Благодарим за помощь!

@Edit:

Вот мой BrandsComponent код:

import {Component} from 'angular2/core'; 
 

 
import {Brand} from './brand.interface'; 
 
import {BrandsService} from './brands.service'; 
 

 
import {ModelsComponent} from './../models/models.component'; 
 

 
@Component({ 
 
\t selector: 'brands', 
 
\t templateUrl: 'templates/brands/list.html', 
 
\t providers: [BrandsService], 
 
\t directives: [ModelsComponent] 
 
}) 
 

 
export class BrandsComponent implements OnInit{ 
 
\t public brands; 
 
\t public selectedBrand : Brand; 
 

 
\t constructor(private _brandsService: BrandsService) { } 
 

 
\t /* 
 
\t * Get all brands from brands service 
 
\t */ 
 
\t getBrands(){ 
 
\t \t this.brands = this._brandsService.getBrands(); 
 
\t } 
 

 
\t /* 
 
\t * On component init, get all brands from service 
 
\t */ 
 
\t ngOnInit(){ 
 
\t \t this.getBrands(); 
 
\t } 
 

 
\t /* 
 
\t * Called when li of brand list was clicked 
 
\t */ 
 
\t onSelect(brand : Brand){ 
 
\t \t this.selectedBrand = brand; 
 
\t } 
 
}

+0

Не мог бы вы разместить код BrandsComponent? – Romain

+0

Какая ошибка. Coz, если вы получаете журнал «Созданный запрос задачи», сначала сначала вам нужно сохранить значение http.get, чтобы использовать, если я не ошибаюсь. – binariedMe

+0

Romain: У меня были мои BrandsComponent, спасибо. @binariedMe: Конечно, но любой запрос отображается в консоли разработчика. Я назначаю результат в var, а консоль регистрирует его, но у меня есть ответ объекта Observer. Я ищу причину и объяснение. – PallMallShow

ответ

1

В самом деле наблюдаемыми ленивы. Это означает, что соответствующие HTTP-запросы не отправляются перед подключением к ним некоторых прослушивателей ответов с использованием метода subscribe.

Добавление подписки метод в конструкторе BrandsService должен вызывать ваш запрос HTTP:

import {Http} from 'angular2/http'; 
import {Injectable, Inject} from 'angular2/core'; 

@Injectable() 
export class BrandsService{ 
    constructor(public http: Http) { 
    console.log('Task Service created.', http); 
    http.get('http://google.fr').subscribe(); 
    } 
    (...) 
} 

Надеется, что это помогает, Тьерри

+0

Спасибо Тьерри. Фактически, с помощью метода подписки, запрос был правильно запущен. После исследования метода подписки мы можем в параметрах установить данные из ответа, такие как: .subscribe (data => this.brands = data.json()); '. Если я console.log (data.json()), это хорошо, у меня был объект. Но если я возвращу this.brands, он возвращает undefined. Может быть, возврат установлен до ответа ajax? – PallMallShow

+0

Да, на самом деле вы не можете вернуть 'this.brands', так как вы находитесь в пределах функции стрелки (т. Е. Обратного вызова). Вместо этого вы должны возвратить наблюдаемое: 'return http.get ('http://google.fr');' и вызвать метод 'subscribe' на нем в компоненте, вызывающем службу. Этот ответ должен помочь вам: http://stackoverflow.com/questions/34450131/how-to-consume-http-component-efficiently-in-angular-2-beta/34450948#34450948 ;-) –

+0

Удивительный парень. Спасибо за ваши предложения! Я возвращаюсь с моей службы к методу http, я в ma компоненте, где был вызван сервис, я установил подписку здесь и все работает. Я надеюсь, что этот пост может помочь многим людям;) – PallMallShow