2016-08-15 168 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(){}