Javascript 角度2+;在视图/模板中调用函数

Javascript 角度2+;在视图/模板中调用函数,javascript,angular,typescript,angular-components,Javascript,Angular,Typescript,Angular Components,当我在角度分量视图中调用函数时,函数会被反复调用。例如: 夜总会.component.ts import { Component } from '@angular/core'; @Component({ selector: 'app-nightclub', templateUrl: './nightclub.component.html', styleUrls: ['./nightclub.component.css'] }) export class NightclubCompo

当我在角度分量视图中调用函数时,函数会被反复调用。例如:

夜总会.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-nightclub',
  templateUrl: './nightclub.component.html',
  styleUrls: ['./nightclub.component.css']
})
export class NightclubComponent {
  doStuff(): number {
    return 1;
  }
}
夜总会.component.html

{{doStuff()}}
这将反复调用doStuff()方法

问题:
一个人应该这样做吗?如果是这样,在什么情况下这是有益的?

这将在每个更改检测周期调用,不建议在模板内使用函数,因为它不会对性能造成很大影响

要在模板上显示的函数/数据的实现高度依赖于您的用例

例如:

如果您正在解析文本,那么管道将是一个很好的选择,因为它可以被记忆


如果对数据的更改可能发生在无法使用
输入
输出
的组件之外,则可观察将是一个不错的选择。

这将在每个更改检测周期调用,建议不要在模板内使用函数,因为它不会对性能造成很大影响

要在模板上显示的函数/数据的实现高度依赖于您的用例

例如:

如果您正在解析文本,那么管道将是一个很好的选择,因为它可以被记忆


如果对数据的更改可能发生在组件之外,而
输入
输出
无法使用,则可观察将是一个不错的选择。

除了答案和注释之外,我将添加一些建议,以优化您的代码。 首先,看看上一次ng配置(“优化角度应用程序-Minko Gechev”)中解释得很好的(~40分钟)

其主要思想是在组件中使用OnPush更改检测策略,对示例中的方法和函数的记忆使用纯管道


但是,如果您的组件中有OnPush策略,并且更改来自“Angular的外部世界”-您还可以将
ChangeDetectorRef
注入到您的组件中,并手动调用
markForCheck()
(有关更多详细信息,请查看)

除了答案和评论之外,我还想添加一些建议,以优化您的代码。 首先,看看上一次ng配置(“优化角度应用程序-Minko Gechev”)中解释得很好的(~40分钟)

其主要思想是在组件中使用OnPush更改检测策略,对示例中的方法和函数的记忆使用纯管道


但是,如果您的组件中有OnPush策略,并且更改来自“Angular的外部世界”-您也可以将
ChangeDetectorRef
注入到您的组件中,并手动调用
markForCheck()
(有关更多详细信息,请查看)

您所说的“这将反复调用doStuff()方法”是什么意思?在Angular应用程序中的“我的函数”中返回一个之前,尝试记录一些内容。如果您随后检查console,您将看到它被多次调用的函数垃圾邮件。是的,这是Angular2+更改检测策略的正常行为。框架应该检查模板和模型,然后如果有任何更改,则更新视图。您所说的“这将反复调用doStuff()方法”是什么意思?在Angular应用程序的my函数中返回一个方法之前,请尝试记录一些内容。如果您随后检查console,您将看到它被多次调用的函数垃圾邮件。是的,这是Angular2+更改检测策略的正常行为。框架应该检查模板和模型,然后更新视图,如果有任何更改。因此Angular每秒会检查多次更改?在生产中,每个applicationRef勾选一次,在开发模式下会发生两次,如果您想优化一种方法,请使用
OnPush
您可以阅读更多内容,谢谢您的帮助!因此,Angular每秒会多次检查更改?在生产环境中,每个applicationRef勾选一次,在开发模式下会执行两次,如果您想优化,请使用
OnPush
您可以阅读更多内容,谢谢您的帮助!