2016-01-24 2 views
1

В настоящее время я получаю следующее сообщение об ошибке:Угловая Error 2 Service - Нет поставщика для Http

EXCEPTION: No provider for Http! (Login -> AuthHttp -> Http)

AuthHttp является ссылкой на Angular2-JWT. Может ли это быть проблемой? Я смотрел на это некоторое время, и я не могу найти, какую ошибку я мог бы иметь.

В моем login.ts:

import {Component} from 'angular2/core'; 
import { 
    FORM_DIRECTIVES, 
    FormBuilder, 
    ControlGroup, 
    Validators, 
    AbstractControl, 
    Control 
} from 'angular2/common'; 
import {Http, Headers} from 'angular2/http'; 
import {Router} from 'angular2/router'; 

import {ButtonRadio} from 'ng2-bootstrap/ng2-bootstrap'; 
import {AuthHttp, AuthConfig} from 'angular2-jwt'; 

import {AuthService} from '../../services/auth/authService'; 
import {AlertService} from '../../services/alerts/alertsService'; 
import {User} from '../../datatypes/user/user'; 

@Component({ 
    selector: 'login', 
    template: require('./login.html'), 
    directives: [ ButtonRadio, FORM_DIRECTIVES ], 
    providers: [AuthService, AlertService, Http, AuthHttp] 
}) 

В моем main.ts:

document.addEventListener('DOMContentLoaded', function main() { 
    bootstrap(App, [ 
    ('production' === process.env.ENV ? [] : ELEMENT_PROBE_PROVIDERS), 
    HTTP_PROVIDERS, 
    ROUTER_PROVIDERS, 
    provide(LocationStrategy, { useClass: HashLocationStrategy }), 
    provide(AuthConfig, { useFactory:() => { 
     return new AuthConfig({ 
     headerName: 'Authorization', 
     //headerPrefix: 'Bearer ', 
     tokenName: 'auth_token', 
     noJwtError: true 
     }); 
    }}), 
    AuthHttp, 
    Http, 
    ConnectionBackend 
    ]) 
    .catch(err => console.error(err)); 
}); 
+1

Попробуйте очистить своих поставщиков, просто наденьте верхний уровень на то, что на самом деле не нужно на нижних уровнях. У меня была какая-то схожая проблема, но она как-то исчезла через некоторое время ... :) – eesdil

+0

Всегда хороший совет! Вещи действительно грязные сейчас, потому что я пытался каждую комбинацию без везения. Убирать вещи сейчас, может быть, это исправит. –

+1

Почему вы настраиваете снова 'HTTP_PROVIDERS',' Http', 'AuthHttp' на уровне компонента? Поставщик «Http» уже содержится в «HTTP_PROVIDERS» ... Этот ответ может помочь вам понять, как работает инъекция зависимостей в Angular2: http://stackoverflow.com/questions/34804298/whats-the-best-way-to- инъекция-one-service-in-another-in-angular-2-beta/34807397 –

ответ

0

Похоже, что это действительно ошибка с Angular2-jwt или, по крайней мере, с его конфигурацией. Here is the way it should be configured.

Тем не менее, мне удалось немного почистить вещи. Если эта проблема на самом деле идет глубже, я попытаюсь снова открыть ее.

1

Вы должны добавить HTTP_BINDINGS

import {HTTP_BINDINGS} from 'angular2/http'; 


bootstrap(..., [ 
    ... 
    HTTP_BINDINGS, 
    ... 
]).catch(...); 
+2

Похоже, что [HTTP_BINDINGS] (https://angular.io/docs/ts/latest/api/http/HTTP_BINDINGS-let.html) перенесен в HTTP_PROVIDERS, который у меня уже есть. –

+1

@ LouisCruz Приятно знать, но я не должен быть слишком удивлён, потому что он все еще бета-версия. Может быть, ваша проблема заключается в том, что вы вводите 'HTTP_PROVIDERS' при загрузке и int компоненте? Я думаю, что один раз будет. – Eggy

+0

Я удалил все другие инъекции 'HTTP_PROVERS'. По-прежнему получается такая же ошибка. –

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