作者:巡山小妖 | 来源:互联网 | 2023-02-01 08:00
我正在使用Material 2来添加md-raised-button
.
我想仅在某些条件成立时应用此指令.
例如:
另一个例子:我在plunker中创建了一个基本的动态反应形式.我正在使用formArrayName
反应形式的指令来控制数组.我想formArrayName
仅在特定条件成立时才应用指令.否则不添加formArrayName
指令.我尝试和研究了很多,但可以找到任何解决方案.
这是plunker链接:https://plnkr.co/edit/oPZ7PyBSf8jjYa2KVh4J ? p = preview
我真的很感激任何贡献.
提前致谢!
1> Aldracor..: 您可以使用以下方法:
应用于您的plunker:fork
更新:
如何condition ? '' : null
作为价值:
当它的空字符串(''
)成为attr.md-raised-button=""
时,它null
的属性将不存在.
更新: plunker更新:fork(版本问题已修复,请注意问题最初是基于角度4)
似乎在我的v6中不起作用
在Angular 6中不适合我.plunker样品没有通过装载屏幕.根据我的阅读,这种方法可能适用于HTML属性,但不适用于Angular指令.最初的问题是关于ng材料库的Angular Directives.
@kbpontius感谢您的评论,它适用于HTML属性,但不适用于angular指令(作为属性)
2> LLL..: 我不知道你是否可以根据条件应用指令,但是解决方法 是有2个按钮并根据条件显示它们 .
编辑:也许这会有所帮助.
感谢您的答复.但我已经在plunker示例中使用了这种技术,我在问题细节中添加了这些技术.如果代码很复杂,这是一个很好的选择但不是好主意.因为这种技术破坏了重用的概念.您可以在plunker中看到我的示例,并注意我的代码是如何因为这种方法而重复的.这就是为什么我不想使用这种技术.我想要一些更好的解决方案,所以我可以生成动态元素.
这是一个非常糟糕的解决方案,因为它重复了代码。想象一下,这不仅是按钮,而且是一个div,其中包含很多html代码。
这是个好主意,但不幸的是它在反应形式的情况下不起作用.使用反应形式,会出现另一个问题.如果我将输入放入单独的组件中,那么angular将要求我在该子组件中添加[formGroup] ="form".但是,如果我这样做,那么我的数组绑定将无法正常工作.
3> H.B...: 如前所述,这似乎不可能.可以用来至少防止一些重复的一件事是ng-template
.这允许您提取受ngIf
分支影响的元素的内容.
例如,如果您想使用Angular Material创建分层菜单组件:
{{ item.icon }}
{{ item.label }}
这里是条件应用的指令matMenuTriggerFor
,它只应用于带子节点的菜单项.按钮的内容通过插入两个位置ngTemplateOutlet
.
这是让开发人员使用条件指令以及代码可重用性的唯一答案.
4> Tiha..: 这可能会迟到,但它是一种可行且优雅的方法,可以有条件地应用指令.
在指令类中创建输入变量:
@Input('myDirective') options: any;
应用指令时,设置输入变量的apply属性:
在指令的方法中检查变量this.options.apply并根据条件应用指令逻辑:
ngAfterViewInit(): void {
if (!this.options.apply) {
return;
}
// directive logic
}
这对我不起作用,因为该指令仍然存在于组件中,它只是不执行逻辑.我希望条件的存在有条件地适用,特别是因为有css检查这个指令.
5> Ankit Singh..: 正如其他人所说,directives
无法动态应用.
但是,如果您只想将平面 md-button
的样式从平面 切换到凸起 ,那么这个
Toggle Raised Button
会做的伎俩.Plunker