2016-05-03 4 views
0

Я постоянно отказываюсь внедрить услугу $log, экономя путь сохранения в класс контроллера компонента.Невозможно ввести услугу в угловой js

Чтобы проверить инъекцию, сохраните, я добавил ng-strict-di в свое приложение. Это в терминах вызывает SearchResultController is not using explicit annotation and cannot be invoked in strict mode, что хорошо, поскольку я полагаюсь на неявную инъекцию прямо сейчас.

Поэтому я добавил явное введение в мою реализацию компоненты:

import htmlTemplate from './searchInput.html'; 

class SearchInputController { 

    constructor($log) { 
     this._log = $log; 
     this.searchText = 'Text to search for'; 
    } 

    handleUpdate() { 
     this.onChange({value: this.searchText}); 
    } 

    doubleMe(i) { 
     this._log.debug('SearchInputController.doubleMe: i='+i); 
     return i+i; 
    } 
} 

SearchInputController.$inject = ['$log']; 

let searchInputComponent = { 

    template: htmlTemplate, 
    controller: SearchInputController, 
    bindings: { 
     onChange: '&' 
    } 

}; 

export default searchInputComponent; 

Это не имеет никакого эффекта сообщение об ошибке все еще жалуется отсутствующей инъекцией.

Я также пробовал ng-annotate-loader и ng-annotate-webpack-plugin. А также попробовали аннотации типа /*@ngInject*/ и 'ngInject';. Все это не имеет никакого эффекта.

Любые идеи, как заставить инъекцию зависимости работать?

+1

Вы говорите, что сообщение об ошибке жалуется на 'SearchResultController', но вы отправили нам источник для' SearchInputController'. – Duncan

+0

Спасибо! Я просто пропустил это. Спас мой день :-). – BetaRide

ответ

0

Ваше примечание представляется правильным для SearchInputController, но сообщение об ошибке жалуется на другой контроллер SearchResultController. Я предлагаю вам также аннотировать это.

Используйте https://babeljs.io/repl/, чтобы проверить, как ES6 скомпилируется до ES5. Это может быть полезно при попытке отслеживания ошибок в аннотации. Использование ng-annotate в той или иной форме должно также работать, когда вы комментируете правильный контроллер.

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