我已經使用了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')
}
仍然會導致相同的錯誤,所以它沒有下降到莫代爾服務在這一點上,我完全難住。
你找到任何解決方案? – gmodrogan
不幸的不是。我最終避免使用ng-inject註釋。 – Suavelizard
我通過使用require('./ path to file')來解決這個問題。例如,當你加載一個app.services模塊,然後你在不同的文件中定義了不同的服務(工廠)時,在你定義app.services模塊的文件中,你可以在文件末尾寫入require('./ path到文件'),它的效果很好 – gmodrogan