2015-10-12 5 views
1

Согласно http://victorsavkin.com/post/126514197956/dependency-injection-in-angular-1-and-angular-2, применение в масштабах всей службы могут быть добавлены к корневой инжектор, используя что-то вроде этого:Как получить доступ к компоненту Angular2, внедренному в компонент?

bootstrap(App, [UserService, LoginService]

И тогда можно обращаться в дочерних компонентов, как это:

class A { 
 
    constructor(userService: UserService) { 
 
    
 
    } 
 
}

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

Каков правильный способ внедрения услуг прикладной программы и доступа к ним в дочерних компонентах?

+0

Правильный синтаксис TS:. 'Конструктор (UserService: UserService)' (т.е. '(переменная типа)') – alexpods

+0

@alexpods Спасибо, указав это и да, я это знаю. Извините, что я списал их с дискомфортом в вопросе. Но в моем коде бросается одно и то же исключение. Любые идеи почему? Я использую встроенный транспилер jspm и установил typescriptOptions: {"emitDecoratorMetadata": true, "experimentalDecorators": true} –

+0

Вы ошибочно изменили 'UserService' на' Userervice'. Как насчет ошибки: try 'constructor (@Inject (UserService) userService: UserService)'. Если это работает, то ошибка, скорее всего, происходит в TS-> JS-транспиляции. – alexpods

ответ

1

Если ребенок компонент находится в отдельном файле, убедитесь, что вы по-прежнему импортировать службу в

import {UserService} from '../../services/UserService'; 

@Component({ 
    // don't add UserService in providers here 
}) 

class A { 
    userService: UserService; 
    constructor(userService: UserService) { 
     this.userService = userService; 
    } 
} 
+0

Это превосходит цель совместного использования одного экземпляра службы в приложении. –

+0

Нет, это поставщик услуг, который создает новый экземпляр. Без использования провайдера в текущем компоненте инжектор углов будет смотреть на инжектор родительского компонента и так далее, пока не найдет экземпляр (в нашем случае на корневом уровне, когда мы загрузили приложение). Документы: [Иерархический DI] (https://angular.io/docs/ts/latest/guide/hierarchical-dependency-injection.html), [Провайдеры] (https://angular.io/docs/ts /latest/guide/dependency-injection.html#!#providers) –

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