让ng-change等待$ watch完成

时间:2015-03-31 11:59:54

标签: javascript angularjs

我有ng-change="myFunc()" ng-model="themodel"的字段 和$watch(themodel, function = {longAsyncFunc();})

我想只在longAsyncFunc返回时触发myFunc()。 我虽然做了类似的事情:

$watch(themodel, function = {longAsyncFunc(); $scope.ready = true;})

myFunc = function() {
    while(!$scope.ready) {
        ;
    }
    $scope.ready = false;
    //do stuff
    }

但它最终会出现无限循环,手表永远不会被触发。

我知道我应该使用promise但是longAsyncFunc已经捕获了异步调用的.then(),我宁愿不修改它。

2 个答案:

答案 0 :(得分:0)

你可以使用这样的回调:

$scope.longAsyncFunc = function(callback) {
   //do what ever you want
   callback();
}

$scope.$watch(themodel, function {
  longAsyncFunc(myFunc); 
  $scope.ready = true;
}

答案 1 :(得分:0)

我不明白你为什么要使用$watch& ng-change在一起,我建议您使用ng-change指令而不是$watchlongAsyncFunc将返回promise对象。

<强> HTML

ng-change="changeFunction()"

<强>控制器

$scope.changeFunction = function() {
    longAsyncFunc().then(function(data){
        //this will ensure the async load completed.
        myFunction();
    })
}