Bri*_*ker 4 html angular lit-element
首先让我说我以前从未真正使用过 Angular。我正在尝试调试我的 Web 组件库的一位用户面临的问题。
我有一个使用 lit-element 的自定义元素,它具有布尔属性。该布尔属性有一个自定义属性转换器,使其将字符串“false”视为假(与本机 html 元素布尔属性相反,其中该属性的存在使其为真)。转换器看起来像这样:
{
fromAttribute(val) {
if (val === 'false') {
return false;
}
if (val === '') {
return true;
}
return Boolean(val);
},
toAttribute(val) {
if (!val) {
return null;
}
return '';
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,Angular 有两种将值绑定到模板中的 html 元素的方法:
enabled="{{ enabled }}"[enabled]="enabled"对于像 这样的本机元素<img>,属性绑定按预期工作 - 我在检查 html 时可以看到该属性。
对于自定义元素,似乎根本没有设置属性 - Angular 似乎无论如何都在设置属性。但是,它正在对值进行字符串化。
这是一个试图证明这一点的 stackblitz:https ://stackblitz.com/edit/angular-lit-element-1vz1nf?file=src%2Fapp%2Fapp.component.ts
我有一个<hello-world>接受name, 和的自定义组件enabled。如果您检查 html,则 name 根本没有设置为属性。enabled已设置,但不是我期望的值。
还有一个<img>标签,在哪里src设置正确。
角度特殊情况下是否自定义元素并且只设置属性?这是在某处记录的吗?对我来说,这感觉就像一个错误,并破坏了一些在 Angular 中使用我的自定义元素的人的代码。
要绑定到属性,您需要使用[attr.*]绑定,否则您将绑定到元素或@Input()自定义元素/组件的属性。在您的示例中,这看起来像:
<hello-world name="{{ name }}" [attr.enabled]="enabled"></hello-world>
Run Code Online (Sandbox Code Playgroud)
你也有@Attribute()装饰器。我已将它的一个示例添加到堆栈中。我不知道这在自定义元素中会是什么样子。我知道你不能对它进行动态绑定。值需要固定,并且需要是字符串
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |