当前位置: 首页 > 知识库问答 >
问题:

为什么colspan在Angular 2中不是已知的本机属性?

孙星鹏
2023-03-14

如果我们尝试这样的代码:

<td [colspan]="1 + 1">Column</td>

或者这是:

<td colspan="{{1 + 1}}">Column</td>

我们很快发现“colspan不是一个已知的原生属性。

从A2文档中,我们了解到:

元素没有colspan属性。它具有“colspan”属性,但插值和属性绑定只能设置属性,不能设置属性。

相反,我们必须这样做:

<td [attr.colspan]="1 + 1">Column</td>

这很公平。

我的问题是,为什么< code>colspan不是DOM的一个属性,如果它不存在,浏览器怎么可能呈现表格,因为浏览器呈现的是DOM而不是HTML?

另外,如果我打开Chrome检查器,然后转到属性选项卡,为什么我可以看到colspan作为元素的属性?

为什么DOM表现出这种不一致?

共有3个答案

谭刚毅
2023-03-14

当浏览器解析HTML时,它将为解析的HTML创建内存中的DOM表示。属性中的数据通常会成为DOM中存在的属性的初始值。

由于 colspan 不是

我们可以看到html属性保存在属性DOM属性中。重要的是要意识到当前的colspan反映在DOM colSpan属性中,这可以在下面的图像中观察到。

在Angular中使用属性绑定时,使用这些DOM属性将文字1绑定到1。因此,为了绑定到colSpan属性,我们需要以下语法:

<td [colSpan]="1 + 1">Column</td>

我们还可以直接绑定到 Angular 中的属性,正如您用以下语法指出的那样:

<td [attr.colspan]="1 + 1">Column</td>

为什么DOM表现出这种不一致?

    <李>一致性的原因所有DOM

孙思源
2023-03-14
匿名用户

我的问题是,为什么colspan不是一个属性

Colspan DOM的属性,但它不是一个

另外,如果我打开Chrome检查器,然后转到属性选项卡,为什么我可以看到colspan作为元素的属性?

当您检查时,chrome会同时显示属性和属性。

如果您考虑以下几点,

<html>
  <head>
  </head>
  <body>
  <table>
    <tr><th>A</th><th>A</th></tr>
    <tr><td colspan="2" id="xyz">B</td></tr>
  </table>
  </body>
</html>

document.getElementById('xyz')。colspan导致未定义,因为它不是一个属性

但是 document.getElementById('xyz').id 导致 xyz 因为它是一个属性

孟宏才
2023-03-14

**类似示例

属性和属性并不总是1:1。一个经常

<label for="someId">

在角度

<label [for]="someId"> 

失败并出现相同的错误,您需要像这样绑定

<label attr.for="{{someId}}">

<label [attr.for]="someId">

但是

<label [htmlFor]="someId">

也会工作,因为在这种情况下<代码> htmlFor吗

另请参见属性和属性之间的区别?

<代码> colSpan > < /代码实际的属性名

据https://developer.mozilla.org/en-US/d

<td [colSpan]="1 + 1">Column</td>

另见https://plnkr.co/edit/BZelYOraELdprw5GMKPr?p=preview

它很好用。

为什么角默认绑定到属性

角绑定到属性默认情况下的性能

 类似资料: