2016-07-25 35 views
0

我知道这里有几个possible strict violation的问题,但我还没有能够根据他们得出结果。我试图在一个类的控制器中使用var vm = this,它抛出了这个错误,但是我在其他控制器中做了同样的事情不止一次,没有发生possible strict violation错误。可能严格违反一个地方,但不是另一个

所以这里是第一个js文件。它是控制器在同一个文件中的角度指令。错误来自下面的控制器中的var vm = this

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

另一个文件,其中这个完美的作品是这样的,例如,它不引发错误:

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

,我能想出的唯一区别是,@的第一个文件,我顶宣布directive,但在第二个文件中,它只是controller。不幸的是,我不是一个角度专家,所以我不知道这是否是一个问题,但只是认为这可能是错误来自哪里?

回答

2

重命名功能scModelLegacyViewerController到ScModelLegacyViewerController。只有名称以大写字母开头时,JsHint才允许将其分配给变量。 所以这将是

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

刚刚添加,jsHint假定一个以大写开头的函数是一个构造函数,在非构造函数中使用'this'时适当使用'this'是有点可疑的 –

+0

这很奇怪。在您根据另一个SO问题做出回应之前,我已经尝试过了,并没有得到肯定的结果。我今天早上回到工作(刚才),并开始了一个新的命令提示符,rand'gulp vet',它工作。所以,是的,哈哈猜测就是这样。感谢您的回应! – erp

0

也许只是使用这个来分配属性?

我的意思是 this.foo = 'bar';

+0

并不想成为粗鲁,但我正在寻找正确的方法来做到这一点,你的反应看起来建议/问题更陷害。根据Angular Style Guide和实现([John Papa的Generator-Hottowel]](https://github.com/johnpapa/generator-hottowel/blob/master/app/templates/src/client/app/dashboard/dashboard。 controller.js))'var vm = this;'更合适。我试图根据我的实施来解决问题。 – erp

相关问题