Javascript AngularJS 1.2.26$scope异步函数执行摘要周期错误
我需要在作用域中有一个函数,其结果将异步更改 必须有一个函数用作表达式,因此我不能使用单个属性 在我的示例中,该函数返回将被异步修改的对象的属性。这将执行摘要错误,尽管该值在整个摘要周期内相等。 下面是一个例子: (注意:它可能会挂起您的浏览器)Javascript AngularJS 1.2.26$scope异步函数执行摘要周期错误,javascript,angularjs,asynchronous,Javascript,Angularjs,Asynchronous,我需要在作用域中有一个函数,其结果将异步更改 必须有一个函数用作表达式,因此我不能使用单个属性 在我的示例中,该函数返回将被异步修改的对象的属性。这将执行摘要错误,尽管该值在整个摘要周期内相等。 下面是一个例子: (注意:它可能会挂起您的浏览器) 你知道怎么解决吗?我有一个解决方案,问题是一直执行$http.get,它会创建承诺,而承诺将同时得到解决。因此,首先我通过检查承诺是否已经创建来解决问题。之后,在promise的回调中,我将控制promise是否创建为null的var设置为null,但
你知道怎么解决吗?我有一个解决方案,问题是一直执行$http.get,它会创建承诺,而承诺将同时得到解决。因此,首先我通过检查承诺是否已经创建来解决问题。之后,在promise的回调中,我将控制promise是否创建为null的var设置为null,但我重新定义了一种桥接函数,该桥接函数返回相同的值,以避免在相同的$digest中执行$http.get: 以及html:
<body>
<div ng-controller="Ctrl1">
<br/><br/>
Param1:<input type="text" ng-model="model.param1" />
Param2:<input type="text" ng-model="model.param2" />
AsyncFunc: {{util.asyncFunc(model.param1, model.param2)}}
</div>
<script src="http://code.angularjs.org/1.2.26/angular.js"></script>
<script src="script.js"></script>
</body>
参数1:
参数2:
AsyncFunc:{{util.AsyncFunc(model.param1,model.param2)}
嗯,我认为这肯定不是最好的解决方案,如果您有其他方法,它将非常有用。我有一个解决方案,问题是始终执行$http.get,它会创建承诺,同时会解决这些承诺。因此,首先我通过检查承诺是否已经创建来解决问题。之后,在promise的回调中,我将控制promise是否创建为null的var设置为null,但我重新定义了一种桥接函数,该桥接函数返回相同的值,以避免在相同的$digest中执行$http.get: 以及html:
<body>
<div ng-controller="Ctrl1">
<br/><br/>
Param1:<input type="text" ng-model="model.param1" />
Param2:<input type="text" ng-model="model.param2" />
AsyncFunc: {{util.asyncFunc(model.param1, model.param2)}}
</div>
<script src="http://code.angularjs.org/1.2.26/angular.js"></script>
<script src="script.js"></script>
</body>
参数1:
参数2:
AsyncFunc:{{util.AsyncFunc(model.param1,model.param2)}
嗯,我认为这肯定不是最好的解决方案,如果您有其他方法,它将非常有用。这是一个异步函数吗?它将返回false。。。。但在2秒后,它会将对象引用myObj.found更改为true。为了使其异步,请从中返回一个
$promise
。您能否演示如何在模板中使用控制器代码?什么是束缚?你只是在杀人。每个$timeout
都会导致一个$digest()
,每个$digest()
都会重新计算所有角度表达式,从而为您的案例导致另一个`$timeout
,依此类推。这意味着它只需到达$digest()
iterations@Samir,你完全正确。“$timeout”导致“$digest()”。好吧,在我真正的问题中,我做的是一个“$http.get”,我也有同样的问题。我在问题和plunkr示例中用$http.get更改了$timeout:,那么,您有没有一个好的方法来实现它的示例?也许是承诺?这是一个异步函数吗?它将返回false。。。。但在2秒后,它会将对象引用myObj.found更改为true。为了使其异步,请从中返回一个$promise
。您能否演示如何在模板中使用控制器代码?什么是束缚?你只是在杀人。每个$timeout
都会导致一个$digest()
,每个$digest()
都会重新计算所有角度表达式,从而为您的案例导致另一个`$timeout
,依此类推。这意味着它只需到达$digest()
iterations@Samir,你完全正确。“$timeout”导致“$digest()”。好吧,在我真正的问题中,我做的是一个“$http.get”,我也有同样的问题。我在问题和plunkr示例中用$http.get更改了$timeout:,那么,您有没有一个好的方法来实现它的示例?也许是承诺?这是一个异步函数吗?它将返回false。。。。但在2秒后,它会将对象引用myObj.found更改为true。为了使其异步,请从中返回一个$promise
。您能否演示如何在模板中使用控制器代码?什么是束缚?你只是在杀人。每个$timeout
都会导致一个$digest()
,每个$digest()
都会重新计算所有角度表达式,从而为您的案例导致另一个`$timeout
,依此类推。这意味着它只需到达$digest()
iterations@Samir,你完全正确。“$timeout”导致“$digest()”。好吧,在我真正的问题中,我做的是一个“$http.get”,我也有同样的问题。我在问题和plunkr示例中用$http.get更改了$timeout:,那么,您有没有一个好的方法来实现它的示例?可能与承诺有关?另一个丑陋的问题是,当我们更改输入值时,http get执行2次。另一个丑陋的问题是,当我们更改输入值时,http get执行2次。另一个丑陋的问题是,当我们更改输入值时,http get执行2次。
<body>
<div ng-controller="Ctrl1">
<br/><br/>
Param1:<input type="text" ng-model="model.param1" />
Param2:<input type="text" ng-model="model.param2" />
AsyncFunc: {{util.asyncFunc(model.param1, model.param2)}}
</div>
<script src="http://code.angularjs.org/1.2.26/angular.js"></script>
<script src="script.js"></script>
</body>