【问题标题】:angular2 - infinite loop when i call method from a Angular 2 class inside templateangular2 - 当我从模板内的 Angular 2 类调用方法时出现无限循环
【发布时间】:2017-03-28 23:43:03
【问题描述】:

当我通过插值从模板中的组件调用方法时遇到问题:{{get_method()}}。该方法运行,但在无限循环中我不知道为什么。有什么帮助吗??

方法的代码是这样的:

get_name() {
  console.log("bonjour");
}

我在我的模板中这样称呼它:

{{get_name()}}

这就是结果:

【问题讨论】:

  • 我认为这与一个事实有关,如果你要插入一些东西,它很可能需要一些东西。就像打印到控制台一样,没有角度数据可以放入插值中。也许如果您返回一个空字符串或其他内容,这将解决您的问题
  • 我已经做了,但是方法总是在模板中循环,它显示模板中返回的值,但控制台仍然无限循环打印
  • 那么用 2 行代码很难确定问题所在。如果这不是问题。
  • 是的,但我必须解决这个问题
  • 我明白这一点,但 2 行代码并没有告诉您有关问题的任何信息。可能还有其他问题,并且完全显示为另一个问题

标签: angular


【解决方案1】:

您不应该在模板中使用方法,因为每次 Angular 运行变更检测时,都会调用该方法,这种情况经常发生。所以实际上这不是一个无限循环,该方法只是在每次更改检测时被调用。

为避免这种情况,您需要更改代码以处理组件中方法的逻辑,并在模板中使用变量。

【讨论】:

  • 我正在开发一个社交网络,我需要在主页(如 facebook)上发布的每个帖子中获取用户名,因此在这种情况下使用变量没有感觉
  • 好吧,您必须构建您的应用程序,以便您可以使用一个/多个变量,您不能在模板中调用该方法,它会无限循环,就像您已经注意到的那样;)
  • 我可能会获取帖子,然后是每个帖子的所有用户。创建帖子和用户的对象,例如:{post: 'post one', user: 'user one'} 并将每个对象推送到数组中,然后您可以在模板中迭代。
  • 我使用 firebase 作为数据库,所以我将我的数据作为 firabaselistobservable 获取,并从这个列表中进行迭代,因为我认为我无法从两个 firabaselistobservable 中获取对象
  • 你可以订阅 observable,它变成一个普通的 JS 对象(或数组)
【解决方案2】:

我终于找到了解决方案,将检测策略更改为 OnPush 以获取更多信息,请访问此链接Change Detection Strategy: OnPush

【讨论】:

  • 在视图中绑定方法仍然不是一个好主意。每次调用变化检测时仍然会调用该方法,即使它的次数要少得多。
  • 我知道这就是我想要的,我正在开发一个实时社交网络
  • @GünterZöchbauer 那么除了更改检测策略 OnPush 之外,最好的解决方案是什么,请告诉我
  • 最好的解决方案是将值分配给一个字段并绑定到该字段。您可以在有或没有OnPush 的情况下使用它。
  • @GünterZöchbauer 如果它是一个字段可以,但是如果我想在按钮上调用 ngif 内的方法,那么我该怎么做,如果我使用更改检测策略组件中的另一个事件不工作,但如果我不使用变化检测策略,那么方法调用会发生不止一次,如何摆脱它有什么想法吗?。
【解决方案3】:

在你的组件中

getName:string;
ngOnInit() {
   this.get_name();
}
get_name() {
    console.log("bonjour");
    this.getName = "bonjour";
}

在你的视图文件中

{{getName}}

【讨论】:

  • 我正在开发一个社交网络,我需要在主页上发布的每个帖子中获取用户名(如 facebook),所以这种方法对我没有帮助
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多