可能严格违反一个地方而不是另一个地方

时间:2016-07-25 20:37:44

标签: javascript angularjs jshint

我知道这里有一些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 个答案:

答案 0 :(得分:3)

将函数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*/}

答案 1 :(得分:0)

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

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