我想创建一个具有不需要值的属性的组件。例如,而不是像这样的东西:(我现在有)
<app-document [mode]="'edit'" ... ></app-document>
或
<app-document [editMode]="true" ... ></app-document>
我宁愿有:
<app-document editMode ...></app-document>
因此组件本身必须查看属性editMode是否存在。当我有很多这样的属性时,这个看起来会干净很多。我没有看到任何关于如何做到这一点的文档。可行吗?
您可以使用布尔值< code>@Input来实现这一点。
HTML:
<app-document [editMode] ...></app-document>
TS:
export class AppDocumentComponent {
@Input() editMode: boolean = true;
// ...
}
现在你有了一个布尔值,你可以用它来改变你的行为。
为便于理解,请注意:
如果有(无值)属性,则默认值< code>true生效。如果没有,则< code>editMode不会获得默认值,而是一个falsy undefined。(所以,这就是为什么这是可行的)。
材料2写了以下方法:
/** Coerces a data-bound value (typically a string) to a boolean. */
export function coerceBooleanProperty(value: any): boolean {
return value != null && `${value}` !== 'false';
}
在应用文档
组件中编写类似内容的内容:
private _editMode: boolean;
@Input()
get editMode() { return this._editMode; }
set editMode(value: any) { this._editMode = coerceBooleanProperty(value); }
然后:
editMode == true
<app-document editMode></app-document>
editMode == false
<app-document></app-document>
如果使用Material2,只需按如下方式导入该方法:
import {coerceBooleanProperty} from '@angular/cdk/coercion';
问题内容: 我是Protractor的新手。尽管缺少文档,但我仍然了解基本原理,但找不到解决此问题的方法。 给出以下代码: 我可以看到输入获取了要插入的文本,并且模型以相同的值更新,但是测试失败,原因是description.getText()返回’‘(空字符串)。 有没有其他方法可以在输入中捕获值? 提前致谢。 问题答案: 显然,Selenium WebDriver有一个怪癖。看这里 尝试: 注
我试图运行一个简单的测试,但测试失败了,因为量角器试图与页面同步,但不能,因为它不在角度。有什么需要改变的想法吗? 配置文件: 得到以下消息:失败:等待量角器与页面同步时出错:“angularJS测试性和angular测试性都未定义。这可能是因为这是一个非angular页面,或者是因为您的测试涉及客户端导航,这可能会干扰量角器的引导。有关详细信息,请参阅http://git.io/v4gxm 如有
> 到目前为止,我使用角2快速入门创建了一个新项目。 我决定开始使用angular 2 cli,并创建了一个新的angular 2 cli项目。 移动了我的所有文件并重新安装了所有软件包。 现在,当我试图在CLI项目中使用角2材料时,我遵循了这里的指南,但这是我得到的: 会出什么问题?
我有一个实现,其中父组件希望通过使用子组件上可用的< code>@Input参数将某些数据传递给子组件。然而,这种数据传输是可选的,父节点可能会也可能不会按照要求传递它。一个组件中可以有可选的输入参数吗?我在下面描述了一个场景:
我在组件中有输入: 模板是: 问题是,如果< code >申请人没有对象< code >代表,申请就会失败。 如果没有,如何设置默认值? 这样地: 我需要始终有< code >类型的< code >代表。 这里还介绍了如何避免错误:
我从HTTP调用中获取了大量的HTML代码。我将HTML块放入一个变量中,并用[innerHTML]将其插入到我的页面中,但我不能为插入的HTML块设置样式。有没有人建议我怎样才能做到这一点? 我想要样式化的HTML是变量“calendar”中包含的块。