【问题标题】:Angular Input binding performance角度输入绑定性能
【发布时间】:2021-06-22 08:26:20
【问题描述】:

对静态数据使用带括号和不带括号的输入绑定在性能上是否有区别?我是说

<my-component [customTitle]="'Hello World'"></my-component>

<my-component customTitle="Hello World"></my-component>

如果有人分享一些与此主题相关的有用文章,我将不胜感激

【问题讨论】:

    标签: angular data-binding


    【解决方案1】:

    如果使用静态数据,请使用Attribute decorator

    在构造函数中

    constructor(@Attribute('customTitle') private customTitle: string) {}
    

    如果你想在 html 中使用,请使用public 而不是private,如果你计划组件可以有或不使用@Optional

    constructor(@Optional() @Attribute('customTitle') public customTitle: string) {
       //and you can use, e.g.
       if (!this.customTitle)
           this.title="a title by defect"
    }
    
    //or in your .html, e.g.
    <div *ngIf="!customTitle">Title by defect</div>
    {{customTitle}}
    

    您可以查看 Netanel Basal 的 this entry 了解它

    【讨论】:

    • 这很有趣。以前从未听说过。谢谢
    【解决方案2】:

    要绑定到元素的属性,请将其括在方括号 [] 中,它将属性标识为目标属性。目标属性是您要为其分配值的 DOM 属性。比如下面代码中的target属性就是图片元素的src属性。

    <img [src]="itemImageUrl">
    

    在大多数情况下,目标名称是属性的名称,即使它看起来是属性的名称。在本例中,src 是元素属性的名称。

    括号 [] 使 Angular 将赋值的右侧作为动态表达式进行计算。如果没有括号,Angular 会将右侧视为字符串文字并将属性设置为该静态值。这称为属性绑定。

    当满足以下所有条件时,您应该省略括号:

    1. 目标属性接受字符串值。

    2. 字符串是一个固定值,您可以将其烘焙到模板中。

    3. 这个初始值永远不会改变。

    您通常在标准 HTML 中以这种方式初始化属性,它同样适用于指令和组件属性初始化。

    将元素属性设置为非字符串数据值时,必须使用属性绑定。

    使用输入绑定在性能上有什么区别吗 静态数据有无括号?

    这取决于何时使用什么。这些没有明显的性能差异,但肯定有人执行表达式。如果您有静态数据,请使用 Angular 文档推荐的不带括号的数据。

    注意:如果禁用默认的更改检测策略到 OnPush,可以节省很多性能问题。

    您可以查看here何时使用数据绑定、属性绑定、角度插值。

    【讨论】:

    • 感谢您的回复。 > 如果您有静态数据,请使用 Angular 文档推荐的不带括号的数据。您能否在 Angular 文档中分享此声明的直接链接?因为我没能找到这个
    • 检查this 不是同一个词,而是给出何时使用它的要点。
    猜你喜欢
    • 1970-01-01
    • 2019-06-26
    • 2019-04-08
    • 2021-07-25
    • 2020-04-21
    • 2013-12-14
    • 2013-10-24
    • 2018-06-07
    • 2021-07-25
    相关资源
    最近更新 更多