我有一個解決方案,問題是執行所有的時間$ http.get,它創建的承諾,將在同一時間解決。所以,首先我通過檢查承諾是否已經創建來解決問題。之後,在promise的回調函數中,我設置了var來控制如果將promise創建爲null,但是我重新定義了一個返回相同值的橋接函數,以避免在同一個$ digest中執行$ http.get: http://plnkr.co/edit/LOXDzVC4do2GTRtyNgSU
var myApp = angular.module('myApp', []);
//nueva 2015-06-09
myApp.controller('Ctrl1', ['$scope', '$http', '$q', function($scope, $http, $q) {
var myObj = {found:false};
$scope.util = {};
var pro;
$scope.util.asyncFunc = doGet;
function doGet(param1, param2){
if(!pro){
pro = $http.get('http://localhost').then(changeValue,changeValue);
}
return myObj.found;
function changeValue(){
if(param1 !== "2"){
myObj.found = true;
}else{
myObj.found = false;
}
$scope.util.asyncFunc = function(param1, param2){
$scope.util.asyncFunc = doGet;
pro = null;
return myObj.found;
}
}
}
}]);
和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>
嗯,我認爲這肯定不是最好的解決辦法,如果你有其他的辦法,將是非常有益的。
這是一個異步函數嗎?它會返回false ....但是在2secs之後它會將對象引用'myObj.found'更改爲true。爲了使它異步,從它返回'$ promise'。 –
你能展示如何在模板中使用控制器代碼嗎?什麼是約束? –
你正在做簡單的事情。每個'$ timeout'都會產生一個'$ digest()',並且每個'$ digest()'都會重新計算所有角度表達式,這些表達式會導致另一個''超時值''用於您的情況等等。這意味着它將簡單地達到'$ digest()'迭代 – Samir