IntelliJ错误地建议在Angular app中使方法静态化

时间:2017-10-28 08:14:32

标签: angular typescript intellij-idea

我有一个简单的注册组件,除了将表单提交到必杀技之外什么也没做。但是,IntelliJ建议onSubmit可以是static。如果我将签名更改为static我无法调用该方法 - 至少据我所知 - 所有答案都表明无法从模板中调用静态组件方法。

显然IntelliJ没有意识到,我实际上是在模板中调用此方法,因此错误地建议制作方法static

是否有解决方法或者我是否必须接受该警告?

以下是一个例子:

组件:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit {
  data: any;
  constructor() {
    this.data = {
      username: ''
    };
  }

  // WARNING: Method can be static
  onSubmit(event) {
    alert('Submitting ..');
  }

  ngOnInit() {
  }

}

模板:

<form (ngSubmit)="onSubmit($event)">    
  <mat-grid-list cols=1>

    <mat-form-field>
      <input matInput placeholder="Username" [(ngModel)]="data.username" name="uname">
    </mat-form-field>    
    <mat-grid-list cols=2>
      <button mat-button type="submit">Ok</button>
      <button mat-button>Cancel</button>
    </mat-grid-list>

  </mat-grid-list>    
</form>

4 个答案:

答案 0 :(得分:2)

Intellij建议将这种方法设置为静态,因为它们不会触及实例的任何状态。

您可以将onSubmit方法设为静态:

static onSubmit(event) {
    alert('Submitting ..');
}

然后intellij将警告您将此方法放在类的非静态方法之前。

然后,您需要在组件中提供一个getter,以便像您一样从模板中调用静态成员。

onSubmit = RegisterComponent.onSubmit;

所以,你的代码应该是:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit {
  data: any;

  onSubmit = RegisterComponent.onSubmit;

  static onSubmit(event) {
    alert('Submitting ..');
  }

  constructor() {
    this.data = {
      username: ''
    };
  }

  ngOnInit() {
  }
}

这会有效,而且你没有任何警告。

答案 1 :(得分:1)

抑制此警告的最快方法是使用警告上的alt输入快捷方式-或当光标位于引起警告的代码中时,单击灯泡-然后使用向右箭头键触发相关警告下拉菜单,其中包含禁止显示警告的选项。

答案 2 :(得分:0)

您可以从pereferences或

中禁用它
@SuppressWarnings("unused")
onSubmit(event) {
    alert('Submitting ..');
}

答案 3 :(得分:0)

对于角度项目,webstorm IDE出现了类似的错误。我通过导航到以下位置来禁用它:

设置->首选项(Ctrl + S)->检查-> Javascript->常规->取消选中规则(方法可以是静态的)