角度表达式绑定中的infinte循环

时间:2017-08-15 21:25:48

标签: angular promise

所以我是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。任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

每次异步函数返回时,Angular都会运行一个新的更改检测周期 - 因此,每次服务返回时 。然后,在每个更改检测周期,它会尝试更新您的视图并重新绑定所有内容,从而有效地重新运行您作为绑定目标放置的任何代码。因为您在重新运行绑定代码时调用的函数中再次订阅 ,Angular决定运行另一个更改检测周期,因为服务再次返回。

长话短说:不要在任何绑定到html元素的函数中放置异步逻辑。

老实说,你根本不应该在绑定中加入复杂的逻辑,因为它们会运行每个变化检测周期(这很多)。我不清楚你想在这里实现什么,但我不知道为什么你需要做你正在做的事情。