所以我是angular 4的新手,我试图将一个函数绑定到一个html元素,然后调用一个服务。问题是它引入了无限循环。经过一番研究后,我认为这是由于消化周期。我认为使用promises会解决问题,但我需要一些请!这是我到目前为止所得到的。
在我的HTML中:
<h1> {{ getElement('title') }}</h1>
和component.js文件中的函数:
getElement(element) {
this.element = element;
this.NewCmsService.getLang().subscribe.then(function(data) {
console.log(data) // infinite loop starts here
})
return this.element;
}
此外,我没有使用打字稿作为FYI。任何见解将不胜感激。
答案 0 :(得分:0)
每次异步函数返回时,Angular都会运行一个新的更改检测周期 - 因此,每次服务返回时 。然后,在每个更改检测周期,它会尝试更新您的视图并重新绑定所有内容,从而有效地重新运行您作为绑定目标放置的任何代码。因为您在重新运行绑定代码时调用的函数中再次订阅 ,Angular决定运行另一个更改检测周期,因为服务再次返回。
长话短说:不要在任何绑定到html元素的函数中放置异步逻辑。
老实说,你根本不应该在绑定中加入复杂的逻辑,因为它们会运行每个变化检测周期(这很多)。我不清楚你想在这里实现什么,但我不知道为什么你需要做你正在做的事情。