Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 进行ng更改,等待$watch完成_Javascript_Angularjs - Fatal编程技术网

Javascript 进行ng更改,等待$watch完成

Javascript 进行ng更改,等待$watch完成,javascript,angularjs,Javascript,Angularjs,我有一个字段,其中ng change=myFunc ng model=themodel 和$watchthemodel,function={longAsyncFunc;} 我希望仅当longancync返回时才触发myFunc。 我想做一些事情,比如: $watchthemodel,function={longancync;$scope.ready=true;} 但它最终会进入一个无限循环,手表永远不会被触发 我知道我应该使用promise,但是longAsyncFunc已经捕获了异步调用的.t

我有一个字段,其中ng change=myFunc ng model=themodel 和$watchthemodel,function={longAsyncFunc;}

我希望仅当longancync返回时才触发myFunc。 我想做一些事情,比如:

$watchthemodel,function={longancync;$scope.ready=true;}

但它最终会进入一个无限循环,手表永远不会被触发


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

您可以像这样使用回调:

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

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

我不明白为什么要同时使用$watch&ng change,我建议您使用ng change指令而不是$watch,longsyncfunc将返回promise对象

HTML

ng change=changeFunction

控制器

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

$scope.$watch(themodel, function {
  longAsyncFunc(myFunc); 
  $scope.ready = true;
}
$scope.changeFunction = function() {
    longAsyncFunc().then(function(data){
        //this will ensure the async load completed.
        myFunction();
    })
}