2016-08-15 4 views
3

Ich habe den Yeoman Angular-Fullstack-Generator verwendet, um eine neue Komponente zu erstellen, und ich versuche, den Modal-Dienst zu injizieren.Wie man Abhängigkeiten in Angular 1.5-Komponenten injiziert, die durch Angular-Fullstack erzeugt werden

ng-annotate verwendet wird, um den Dienst zu injizieren jedoch bekomme ich diese:

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

Der Controller wie so aussieht:

'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; 

Der Generator automatisch eine Komponente Gerüste aus, die wie so aussieht:

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; 

Versuch, $ http in den Campai zu injizieren GNS-Controller wie

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

verursachen immer noch den gleichen Fehler, so dass es an dieser Stelle nicht bis auf den Modal-Dienst ist, und ich bin völlig ratlos.

+0

Sie eine Lösung gefunden? – gmodrogan

+0

Leider nicht. Am Ende habe ich die Verwendung der ng-inject-Annotation vermieden. – Suavelizard

+1

Ich habe das mit require ('./ Pfad zur Datei') behoben. Wenn Sie beispielsweise ein app.services-Modul laden und dann verschiedene Dienste (Fabriken) in separaten Dateien definiert haben, können Sie in der Datei, in der Sie das app.services-Modul definieren, am Ende der Datei require ('./ path ablegen ') und es funktioniert super – gmodrogan

Antwort

0

Sie können diesen Fehler beheben, indem Sie die Eigenschaft $inject verwenden. Grundsätzlich ist die Lösung für Ihr Problem, die '$http' Abhängigkeit zu injizieren.

CampaignsComponent.$inject['$http']; 

Dieser Fehler tritt auf, wenn eine Funktion oder Anbieter aufzurufen versuchen, die nicht explizit mit Anmerkungen versehen worden, während die Anwendung mit strengen-di-Modus aktiviert läuft. Sie können die Details here lesen.

0

Fügen Sie die folgende Methode, um Ihre MainController Klasse:

$onInit(){} 
Verwandte Themen