Возможно строгое нарушение одного места, но не другого

0

Я знаю, что здесь есть несколько possible strict violation, но я не смог прийти к результату, основанному на них. Я пытаюсь использовать var vm = this в контроллере в одном классе, и это бросает эту ошибку, но я делал то же самое в других контроллерах более одного раза без каких-либо possible strict violation ошибок при 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. К сожалению, я не эксперт по углам, поэтому я не знаю, является ли это проблемой, но просто думаю, что это может быть ошибка?

Теги:
jshint

2 ответа

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*/}
  • 0
    просто чтобы добавить, jsHint предполагает, что функция, начинающаяся с заглавной буквы, является функцией конструктора, где использование this целесообразно, в то время как использование this в функции не конструктора является небольшим подозрением
  • 0
    Это странно. Я пытался сделать это до того, как вы ответили на другой вопрос SO и не получили положительного результата. Я вернулся на работу сегодня утром (только сейчас) и начал новую командную строку, rand gulp vet и это сработало. Так что да, ха-ха, думаю, это все. Спасибо за ответ!
0

Может быть, просто используйте это, чтобы назначить свойства?

Я имею в виду this.foo = 'bar';

  • 0
    Не пытаюсь быть грубым, но я ищу правильный способ сделать это, и ваш ответ выглядит скорее как предложение / вопрос. В соответствии с Angular Style Guide и реализацией ( Generator-Hottowel от John Papa ) var vm = this; более уместно. Я пытаюсь решить проблему с точки зрения моей реализации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню