【发布时间】:2015-08-22 16:40:21
【问题描述】:
我需要在作用域中有一个函数,它的结果会异步改变。
必须有一个函数用作表达式,所以我不能使用单个属性。
在我的示例中,该函数返回一个对象的属性,该属性将被异步修改。尽管该值在整个摘要周期内相等,但这会执行摘要错误。 这里的例子: http://plnkr.co/edit/YmyroMiMyMzUaLW4tc7V(注意:它可能会挂起你的浏览器)
myApp.controller('Ctrl1', ['$scope', '$http', function($scope, $http) {
var myObj = {found:false};
$scope.util = {};
$scope.util.asyncFunc = function(){
$http.get('http://localhost').then(changeValue,changeValue);
return myObj.found;
}
function changeValue(){
myObj.found = true;
}
}]);
知道怎么解决吗?
【问题讨论】:
-
这是一个异步函数吗?它会返回 false.... 但 2 秒后它会将对象引用
myObj.found更改为 true。为了使它异步,从它返回一个$promise。 -
你能展示控制器代码是如何在模板中使用的吗?什么是绑定的?
-
你简直就是在杀人。每个
$timeout都会导致$digest()和每个$digest()重新评估所有角度表达式,这会导致另一个`$timeout用于您的案例等等。这意味着它只会达到$digest()迭代次数 -
@Samir,你是完全正确的。 '$timeout' 会导致 '$digest()'。好吧,在我真正的问题中,我所做的是一个“$http.get”,我也有同样的问题。
-
我在问题和 plunkr 示例中用 $http.get 更改了 $timeout:plnkr.co/edit/YmyroMiMyMzUaLW4tc7V,那么,你有一个很好的方法来实现它的例子吗?也许有承诺?
标签: javascript angularjs asynchronous