2017-10-04 20 views
1

コントローラ内にいくつかのアクションがあります。これには、解決されると、controllerAsバインディングを介してビューを更新するPromiseオブジェクトが含まれています。問題は、解決された値が正しい(コンソールに記録されている)が、コントローラーに割り当ててもビューが更新されないということです。その約束を含むアクションが再度実行されたときにのみ更新されます。ですから、ボタンを押して実行し続けると、更新は1回実行されます。約束事が解決されたときのAngularJSの遅延ビューの更新

私はAngularJS 1.6.5を使用しています。私は$ qを使用していません。 $範囲もないので、$適用しないでください。約束とせずに行動を比較する2つの部材と

マイ簡略コントローラ:

var vm = this; 

vm.textSync = 0; 
vm.textAsync = 0; 

vm.onclick = function() 
{ 
    var action = new Promise(function(resolve, reject) 
    { 
     resolve(vm.textAsync + 1); 
    }); 

    action.then(function(result) 
    { 
     console.log(result); 
     vm.textAsync = result; 
    }); 

    vm.textSync++; 
}; 

ログイン値をインクリメントtextSync(1,2,3、...)に等しいが、textAsyncビュー内では、eackクリック後の(textSync-1)と等しくなります(したがって、0,1,2、...)。それはなぜそれを修正するのですか?

私の簡素化ビュー:

<input type="button" value="Click me" ng-click="$ctrl.onclick()" /> 
<input ng-model="$ctrl.textSync" /> 
<input ng-model="$ctrl.textAsync" /> 

答えて

0

をあなたはこれだけ機能した後、0を省略し、このようなあなたの約束を包むダイジェストサイクルを待つために0秒で$タイムアウトを使用することができ、サイクルを消化トリガーにしたくないので、 - 不要:

$timeout(action.then(function(result) { 
     console.log(result); 
     vm.textAsync = result; 
    })); 
関連する問題