无法在角度js中注入服务

时间:2016-05-03 11:49:40

标签: angularjs dependency-injection

我经常无法以最小化保存方式将$log服务注入到组件的控制器类中。

为了检查注射是否保存,我将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 个答案:

答案 0 :(得分:0)

您的注释对于SearchInputController似乎是正确的,但错误消息是抱怨不同的控制器SearchResultController。我建议你也需要注释那个。

使用https://babeljs.io/repl/检查ES6如何编译为ES5。在尝试跟踪注释中的错误时,这非常有用。在注释正确的控制器时,以某种形式使用ng-annotate也应该有效。