У меня есть следующий массив с инъекционными , которые связаны с службами :
import { YouTubeSearchService,
YOUTUBE_API_KEY,
YOUTUBE_API_URL } from './you-tube.service';
export const youTubeSearchInjectables: Array<any> = [
{ provide: YouTubeSearchService, useClass: YouTubeSearchService },
{ provide: YOUTUBE_API_KEY, useClass: YOUTUBE_API_KEY },
{ provide: YOUTUBE_API_URL, useClass: YOUTUBE_API_URL }
];
И я пытаюсь передать его провайдерам в app.module.ts :
/*other imports*/
import { youTubeSearchInjectables } from './search-result/you-tube-search.injectables';
@NgModule({
declarations: [
AppComponent,
SimpleHttpComponent,
SearchResultComponent,
SearchBoxComponent
],
imports: [
BrowserModule,
FormsModule,
HttpClientModule
],
providers: [youTubeSearchInjectables],
bootstrap: [AppComponent]
})
export class AppModule { }
Однако я получаю "ОШИБКА в Не могу прочитать свойство" длина "из неопределенного" (только одна строка, больше ничего).
Я полагаю, что причина, скорее всего, связана с версией Angular.Я использую 6, и проект книги написан в версии 5. Тем не менее, документация Angular по Dependency Injection говорит, что книжный путь - верный путь ... Так что я немного запутался.Или, может быть, я просто что-то упускаю.
Я на самом деле пытался вручную добавить каждый инъекционный файл в app.module, но получил ту же ошибку.
Любая помощь будет оценена
РЕДАКТИРОВАТЬ : пробовал "условии In: 'root'," в соответствии с обновлением ng6, но это не помогло.
На всякий случай - класс инъекций:
/*imports*/
export const YOUTUBE_API_KEY = 'keykeykey';
export const YOUTUBE_API_URL = 'https://www.googleapis.com/youtube/v3/search';
@Injectable({
providedIn: 'root',
})
export class YouTubeSearchService {
constructor(
private http: HttpClient,
@Inject(YOUTUBE_API_KEY) private apiKey: string,
@Inject(YOUTUBE_API_URL) private apiUrl: string
) { }
search(query: string): Observable<SearchResult[]> {
// logic
}
}