Angular 2组件输入没有值

Ala*_*ect 12 angular

我想创建一个具有不需要值的属性的组件.例如,而不是像这样的东西:(我现在有)

<app-document [mode]="'edit'" ... ></app-document>
Run Code Online (Sandbox Code Playgroud)

要么

<app-document [editMode]="true" ... ></app-document>
Run Code Online (Sandbox Code Playgroud)

我宁愿:

<app-document editMode ...></app-document>
Run Code Online (Sandbox Code Playgroud)

因此组件本身必须查看属性editMode是否存在.当我有很多这样的属性时,这看起来会更清晰.我还没有看到有关如何执行此操作的任何文档.它可行吗?

Ale*_*nic 18

Material2编写了以下方法:

/** Coerces a data-bound value (typically a string) to a boolean. */
export function coerceBooleanProperty(value: any): boolean {
  return value != null && `${value}` !== 'false';
}
Run Code Online (Sandbox Code Playgroud)

app-document组件中写下类似的东西:

private _editMode: boolean;
@Input()
get editMode() { return this._editMode; }
set editMode(value: any) { this._editMode = coerceBooleanProperty(value); }
Run Code Online (Sandbox Code Playgroud)

然后:

editMode == true
<app-document editMode></app-document>

editMode == false
<app-document></app-document>
Run Code Online (Sandbox Code Playgroud)

如果您使用Material2,您只需按如下方式导入方法:

import {coerceBooleanProperty} from '@angular/cdk/coercion';
Run Code Online (Sandbox Code Playgroud)


0xc*_*aff 5

您可以使用boolean @Inputs实现此目的。

HTML:

<app-document [editMode] ...></app-document>
Run Code Online (Sandbox Code Playgroud)

TS:

export class AppDocumentComponent {
  @Input() editMode: boolean = true;
  // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用布尔值来更改行为。

nb以便更好地理解:

默认值为true踢,如果有一个(毫无价值)属性。如果不存在,editMode则不获取默认值,但会得到错误的未定义。(因此,这就是为什么如此)。

  • 我没有想到那种模式,但是那很聪明。如果我没有记错的话,editMode的值是直观的倒数(不是布尔值),但是我可以接受。类似于@Input('editMode')notEditMode:boolean = true;。我猜咖啡因和猴子似乎相处得很好。 (2认同)