Angular中为什么不要在模板中调用方法

本篇文章给大家介绍一下angular中不在模板(template)里面调用方法的原因,以及解决方法,希望对大家有所帮助!

Angular中为什么不要在模板中调用方法

在运行 ng generate component 命令后创建angular组件的时候,默认情况下会生成四个文件:

一个组件文件 .component.ts一个模板文件 .component.html一个 CSS 文件, .component.css测试文件 .component.spec.ts

【相关教程推荐:《angular教程》】

模板,就是你的HTML代码,需要避免在里面调用非事件类的方法。举个例子

  translate Name: {{ originName }}

  translate Name: {{ getTranslatedName('你好') }}

登录后复制

// 组件文件import { Component } from '@angular/core';@Component({  selector: 'my-app',  templateUrl: './app.component.html',  styleUrls: ['./app.component.css'],})export class AppComponent {  originName = '你好';  getTranslatedName(name: string): string {    console.log('getTranslatedName called for', name);    return 'hello world!';  }  onClick() {    console.log('Button clicked!');  }}

登录后复制

1.png

我们在模板里面直接调用了getTranslatedName方法,很方便的显示了该方法的返回值 hello world。看起来没什么问题,但如果我们去检查console会发现这个方法不止调用了一次。

2.png

并且在我们点击按钮的时候,即便没想更改originName,还会继续调用这个方法。

3.png

原因与angular的变化检测机制有关。正常来说我们希望,当一个值发生改变的时候才去重新渲染对应的模块,但angular并没有办法去检测一个函数的返回值是否发生变化,所以只能在每一次检测变化的时候去执行一次这个函数,这也是为什么点击按钮时,即便没有对originName进行更改却还是执行了getTranslatedName

当我们绑定的不是点击事件,而是其他更容易触发的事件,例如 mouseenter, mouseleave, mousemove等该函数可能会被无意义的调用成百上千次,这可能会带来不小的资源浪费而导致性能问题。

一个小Demo:https://stackblitz.com/edit/angular-ivy-4bahvo?file=src/app/app.component.html

大多数情况下,我们总能找到替代方案,例如在onInit赋值

import { Component, OnInit } from '@angular/core';@Component({  selector: 'my-app',  templateUrl: './app.component.html',  styleUrls: ['./app.component.css'],})export class AppComponent implements OnInit {  originName = '你好';  TranslatedName: string;  ngOnInit(): void {    this.TranslatedName = this.getTranslatedName(this.originName)  }  getTranslatedName(name: string): string {    console.count('getTranslatedName');    return 'hello world!';  }  onClick() {    console.log('Button clicked!');  }}

登录后复制

或者使用pipe,避免文章过长,就不详述了。

更多编程相关知识,请访问:编程视频!!

以上就是Angular中为什么不要在模板中调用方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2707433.html

(0)
上一篇 2025年3月7日 20:12:28
下一篇 2025年2月26日 22:19:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论