2016-07-25 17 views
0

Ich weiß, es gibt ein paar possible strict violation Fragen hier, aber ich konnte nicht zu einem Ergebnis basierend auf ihnen kommen. Ich versuche, var vm = this in einem Controller in einer Klasse zu verwenden und es wirft diesen Fehler, aber ich habe das Gleiche in anderen Controllern mehr als einmal ohne possible strict violation Fehler gemacht.Mögliche strikte Verletzung eines Ortes, aber nicht eine andere

Also hier ist die erste js-Datei. Es ist eine eckige Anweisung mit dem Controller in der gleichen Datei. Der Fehler kommt von der var vm = this im Controller unten.

angular.module('app.monitor').directive('scModelLegacyViewer', 
     scModelLegacyViewer); 

    function scModelLegacyViewer() { 

    return { 
     restrict : 'E', 
     templateUrl : 'app/monitor/monitor.html', 
     scope : { 
     config : '=', 
     register : '&?', 
     data : '=?', 
     allowEditingSwitch : '=?' 
     }, 
     controller: scModelLegacyViewerController, 
     controllerAs: 'vm' 
    }; 
    } 

    scModelLegacyViewerController.$inject = [ '$q', '$scope', '$timeout', 'config', 
              'logger', 'ProjectService', 'ModelService', 'InstanceService', 
              'BayesianService']; 

    function scModelLegacyViewerController($q, $scope, $timeout, 
     config, logger, ProjectService, 
     ModelService, InstanceService, BayesianService) { 
     var vm = this; // HERE IS THE ERROR LINE 
     vm.modelInstanceChannel = 'MODEL_INSTANCE'; 
     vm.saveAll = saveAll; 
     ... 

Eine weitere Datei, in der das dies zum Beispiel funktioniert perfekt ist, die keine Fehler werfen:

angular 
    .module('app.model') 
    .controller('ModelController', ModelController); 

    //scInitialConfig added in model.route.js 
    ModelController.$inject = ['$document', '$interval', '$scope', '$stateParams', 'logger', 
     'modelService', 'scInitialConfig']; 
    /* @ngInject */ 
    function ModelController($document, $interval, $scope, $stateParams, logger, 
     modelService, scInitialConfig) { 
    var vm = this; 
    var data = null; 
    vm.instance = 'default'; 
    vm.title = 'Model Viewer'; 
    ... 

Der einzige Unterschied, den ich mit oben kommen kann ist, dass @ die Spitze der ersten Datei, die ich bin die directive deklariert, aber in der 2. Datei ist es nur die controller. Leider bin ich kein kantiger Experte, also weiß ich nicht, ob das ein Problem ist, aber ich denke nur, dass dies der Fehler ist, von dem der Fehler kommt.

Antwort

2

Rename Funktion scModelLegacyViewerController zu ScModelLegacyViewerController. JsHint erlaubt es, dies nur dann einer Variablen zuzuweisen, wenn der Name mit einem Großbuchstaben beginnt. es also los

angular.module('app.monitor').directive('scModelLegacyViewer', 
     scModelLegacyViewer); 

    function scModelLegacyViewer() { 

    return { 
     restrict : 'E', 
     templateUrl : 'app/monitor/monitor.html', 
     scope : { 
     config : '=', 
     register : '&?', 
     data : '=?', 
     allowEditingSwitch : '=?' 
     }, 
     controller: ScModelLegacyViewerController, 
     controllerAs: 'vm' 
    }; 
    } 

    function ScModelLegacyViewerController() {/*code*/} 
+0

nur um hinzuzufügen, jsHint nimmt an, dass eine Funktion, die mit einem Großbuchstaben beginnt, eine Konstruktorfunktion ist, wobei 'this' geeignet ist, während 'this' in einer Nicht-Konstruktorfunktion zu verwenden ist ein wenig verdächtig –

+0

Das ist komisch. Ich habe dies versucht, bevor Sie die Antwort basierend auf einer anderen SO-Frage gemacht haben und kein positives Ergebnis erhalten haben. Ich bin heute Morgen wieder in die Arbeit gekommen und habe eine neue Eingabeaufforderung gestartet, Rand 'Schluckarzt' und es hat funktioniert. Also ja, haha, das war es. Danke für die Antwort! – erp

0

Vielleicht einfach verwenden diese Eigenschaften zuweisen?

ich meine this.foo = 'bar';

+0

Nicht zu versuchen, unhöflich zu sein, aber ich bin auf der Suche nach der richtigen Art und Weise dieses und Ihre Antwort zu tun, sieht mehr eingerahmte als Vorschlag/Frage. Nach dem Angular Style Guide und der Implementierung ([Generator-Hottowel von John Papa] (https://github.com/johnpapa/generator-hottowel/blob/master/app/templates/src/client/app/dashboard/dashboard). controller.js)) 'var vm = this;' ist besser geeignet. Ich versuche, das Problem in Bezug auf meine Implementierung zu lösen. – erp