我想创建一个具有不需要值的属性的组件.例如,而不是像这样的东西:(我现在有)
<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)
您可以使用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则不获取默认值,但会得到错误的未定义。(因此,这就是为什么如此)。