шаблон: неразрешенная переменная или введите $ctrl

как сказать PhpStorm / WebStorm, что $ctrl в шаблоне известен, а также помогает ему решить, к какому контроллеру он принадлежит (возможно, с помощью jsdoc)?

Я создаю компоненты таким образом, в угловой 1.5:

angular
    .module('myModule')
    .component('myComponent', {
        templateUrl: "my.component.html",
        controller : [
            MyComponentController
        ]
    });

ControllerAs не помогло...

фрагмент HTML, где появляется проблема ($ctrl.*):

<div class="entity-summary clear" ng-click="$ctrl.toggleInfo()"> 
  <div class="entity-col">
    {{$ctrl.entity.id}}
  </div>
  <div class="entity-col">
    {{$ctrl.entity.host}}
  </div> 
</div>

4 ответов


к сожалению угловые 1.5 компоненты еще не полностью поддерживаются, пожалуйста, следуйте WEB-20339 для обновления


вы можете избежать большей части шума (mis) с помощью ng-init="$ctrl=$ctrl":

<div ng-init="$ctrl=$ctrl"         
     ng-click="$ctrl.toggleInfo()"
     class="entity-summary clear" > 
  <div class="entity-col">
    {{$ctrl.entity.id}}
  </div>
  <div class="entity-col">
    {{$ctrl.entity.host}}
  </div> 
</div>

Я нашел не плохое решение.

условие

вы должны использовать по крайней мере ES2016.

Если у вас есть компонент такой:

export class MyComponent {

}

export const MyComponentController = {
  controller: MyComponent,
  templateUrl: require('./my-component.html')
};

вы можете просто добавить следующую строку:

module.$ctrl = MyComponent;

тогда WebStorm может решить $ctrl в шаблоне. Intellisense / автозаполнение, к сожалению, все еще не работает .


Edit: просто понял, что это не было об удалении ошибки / предупреждения, но оставить этот ответ в любом случае:

Я удалил предупреждение в Редакторе > Inpections > неразрешенная переменная Javascript для всего, кроме области источников javascript (которую я настроил для своего проекта). Его немного "дробовик решение", но я могу жить без этой проверки в html-файлах...