我如何有条件地添加一个元素属性,例如复选框的复选?
以前版本的Angular有NgAttr和NgChecked,它们似乎都提供了我想要的功能。然而,这些属性在Angular 2中似乎不存在,而且我也找不到其他方法来提供这个功能。
我如何有条件地添加一个元素属性,例如复选框的复选?
以前版本的Angular有NgAttr和NgChecked,它们似乎都提供了我想要的功能。然而,这些属性在Angular 2中似乎不存在,而且我也找不到其他方法来提供这个功能。
当前回答
如果你需要精确检查,最好使用property而不是attribute,并为它分配一些布尔值:
<input type="checkbox" [checked]="smth">
如果你想有条件地添加任意属性,你可以使用binding对它:
<p [attr.data-smth]="smth">
如果该值为undefined或未添加null属性。 如果值为空字符串,则添加属性时不带值。 否则,属性将使用字符串化值添加。
当然,您可以将它与attr一起使用。检查:
<input type="checkbox" [attr.checked]="smth ? '' : null">
但请注意,在这种情况下,attr与被检查是不同步的,所以下面的组合
<input type="checkbox" [checked]="false" [attr.checked]="''">
将导致属性为选中的未选中复选框。
一个完整的例子:
import { Component } from "@angular/core";
@Component({
selector: "app-root",
template: `
<p [attr.data-smth]="e">The value is: {{what(e)}}</p>
<p [attr.data-smth]="s">The value is: {{what(s)}}</p>
<p [attr.data-smth]="u">The value is: {{what(u)}}</p>
<p [attr.data-smth]="n">The value is: {{what(n)}}</p>
<p [attr.data-smth]="t">The value is: {{what(t)}}</p>
<p [attr.data-smth]="f">The value is: {{what(f)}}</p>
<input type="checkbox" [checked]="t">
<input type="checkbox" [checked]="f">
<input type="checkbox" [attr.checked]="t ? '' : null">
<input type="checkbox" [attr.checked]="f ? '' : null">
<input type="checkbox" [checked]="false" [attr.checked]="''">
`,
styles: [`
p[data-smth] {
color: blue;
}
`]
})
export class AppComponent {
e = ""
s = "abc"
u = undefined
n = null
t = true
f = false
what(x) {
return typeof x === 'string' ? JSON.stringify(x) : x + ""
}
}
这就是结果:
标记:
其他回答
在这里,段落只打印'isValid'为真/它包含任何值
<p *ngIf="isValid ? true : false">Paragraph</p>
如果你需要精确检查,最好使用property而不是attribute,并为它分配一些布尔值:
<input type="checkbox" [checked]="smth">
如果你想有条件地添加任意属性,你可以使用binding对它:
<p [attr.data-smth]="smth">
如果该值为undefined或未添加null属性。 如果值为空字符串,则添加属性时不带值。 否则,属性将使用字符串化值添加。
当然,您可以将它与attr一起使用。检查:
<input type="checkbox" [attr.checked]="smth ? '' : null">
但请注意,在这种情况下,attr与被检查是不同步的,所以下面的组合
<input type="checkbox" [checked]="false" [attr.checked]="''">
将导致属性为选中的未选中复选框。
一个完整的例子:
import { Component } from "@angular/core";
@Component({
selector: "app-root",
template: `
<p [attr.data-smth]="e">The value is: {{what(e)}}</p>
<p [attr.data-smth]="s">The value is: {{what(s)}}</p>
<p [attr.data-smth]="u">The value is: {{what(u)}}</p>
<p [attr.data-smth]="n">The value is: {{what(n)}}</p>
<p [attr.data-smth]="t">The value is: {{what(t)}}</p>
<p [attr.data-smth]="f">The value is: {{what(f)}}</p>
<input type="checkbox" [checked]="t">
<input type="checkbox" [checked]="f">
<input type="checkbox" [attr.checked]="t ? '' : null">
<input type="checkbox" [attr.checked]="f ? '' : null">
<input type="checkbox" [checked]="false" [attr.checked]="''">
`,
styles: [`
p[data-smth] {
color: blue;
}
`]
})
export class AppComponent {
e = ""
s = "abc"
u = undefined
n = null
t = true
f = false
what(x) {
return typeof x === 'string' ? JSON.stringify(x) : x + ""
}
}
这就是结果:
标记:
在angular-2属性语法中是
<div [attr.role]="myAriaRole">
将属性role绑定到表达式myAriaRole的结果。
所以可以用like
[attr.role]="myAriaRole ? true: null"
对于为已经存在的scss编写HTML的人,可以使用更好的方法。 超文本标记语言
[attr.role]="<boolean>"
scss
[role = "true"] { ... }
这样你就不需要<boolean> ?True:每次都为空。
金特柴尔德解答
现在情况似乎有所不同。我试图这样做,有条件地应用一个href属性到一个锚标记。你必须使用undefined来表示“不适用”的情况。作为示例,我将演示一个有条件地应用href属性的链接。
——编辑 看起来angular改变了一些东西,所以null现在可以正常工作了。我将示例更新为使用null而不是undefined。
根据超链接规范,没有href属性的锚标记将变成纯文本,表示链接的占位符。
对于我的导航,我有一个链接列表,但其中一个链接代表当前页面。我不希望当前页面链接是一个链接,但仍然希望它出现在列表中(它有一些自定义样式,但这个例子是简化的)。
<a [attr.href]="currentUrl !== link.url ? link.url : null">
我认为这比在span和anchor标签上使用两个*ngIf更简洁。它还非常适合为按钮添加禁用属性。