2016-08-15 97 views
3

我已经使用了Yeoman Angular-Fullstack生成器来创建一个新组件,我试图将Modal服务注入到它中。如何在Angular-Fullstack生成的Angular 1.5组件中注入依赖关系

ng-annotate被用来注入服务,但是我得到这个:

Error: [$injector:strictdi] CampaignsComponent is not using explicit annotation and cannot be invoked in strict mode

控制器看起来像这样:

'use strict'; 
const angular = require('angular'); 
const uiRouter = require('angular-ui-router'); 
import routes from './campaigns.routes'; 

export class CampaignsComponent { 
    /*@ngInject*/ 
    constructor(Modal) { 
    console.log('campaigns'); 
      this.confirmDelete = Modal.confirm.delete(); 

    } 
} 
// CampaignsComponent.$inject['Modal']; 
export default angular.module('myApp.campaigns', [uiRouter]) 
    .config(routes) 
    .component('campaigns', { 
    template: require('./campaigns.html'), 
    controller: CampaignsComponent, 
    controllerAs: 'campaignsCtrl' 
    }) 
    .name; 

发电机自动脚手架出一个组件,它看起来像这样:

import angular from 'angular'; 
import uiRouter from 'angular-ui-router'; 
import routing from './main.routes'; 

export class MainController { 

    /*@ngInject*/ 
    constructor($http) { 
    this.$http = $http; 
    console.log('main') 
    } 

    $onInit() { 
    this.$http.get('/api/things') 
     .then(response => { 
     this.awesomeThings = response.data; 
     }); 
    } 

    addThing() { 
    if (this.newThing) { 
     this.$http.post('/api/things', { 
     name: this.newThing 
     }); 
     this.newThing = ''; 
    } 
    } 

    deleteThing(thing) { 
    this.$http.delete('/api/things/' + thing._id); 
    } 
} 

export default angular.module('myApp.main', [uiRouter]) 
    .config(routing) 
    .component('main', { 
    template: require('./main.html'), 
    controller: MainController 
    }) 
    .name; 

试图将$ http注入到Campai中gns控制器像

/*@ngInject*/ 
    constructor($http) { 
    this.$http = $http; 
    console.log('main') 
    } 

仍然会导致相同的错误,所以它没有下降到莫代尔服务在这一点上,我完全难住。

+0

你找到任何解决方案? – gmodrogan

+0

不幸的不是。我最终避免使用ng-inject注释。 – Suavelizard

+1

我通过使用require('./ path to file')来解决这个问题。例如,当你加载一个app.services模块,然后你在不同的文件中定义了不同的服务(工厂)时,在你定义app.services模块的文件中,你可以在文件末尾写入require('./ path到文件'),它的效果很好 – gmodrogan

回答

0

您可以使用$inject属性修复此错误。基本上,解决您的问题是注入'$http'依赖项。

CampaignsComponent.$inject['$http']; 

当尝试调用未启用strict-di模式的应用程序运行时未明确注释的函数或提供程序时,会发生此错误。您可以阅读详细信息here

0

添加下面的方法到您MainController类:

$onInit(){}