式内で 2 番目のダイジェスト サイクルをトリガーする方法を考えています$watch
。1 つの$watch
式内で可能なダイジェスト サイクルは 1 つだけのようです。電話をかけようとしまし$apply
たが、「ダイジェストが既に進行中です」というメッセージが表示されてクラッシュします。
function TestCtrl($scope) {
var purchase_orders = [
{id : 1, name : 'Purchase Order One', multiple_day_rates : true },
{id : 2, name : 'Purchase Order Two', multiple_day_rates : false },
{id : 3, name : 'Purchase Order Three', multiple_day_rates : true } ];
$scope.purchase_orders = purchase_orders;
$scope.$watch(
"poId",
function( poId ) {
console.log("watch triggered for po id");
$scope.multiple_day_rates = null; //seems to have no effect..
//$scope.$apply(function () {
// $scope.multiple_day_rates = null;
// }); --> throws digest already in progress
var purchase_order_obj = jQuery.grep($scope.purchase_orders, function(e){ return e.id == $scope.poId; });
if(typeof purchase_order_obj[0] != 'undefined'){
if(purchase_order_obj[0].multiple_day_rates == true){
console.log("before setting multiple day rates to true");
$scope.multiple_day_rates = true;
}
else{
console.log("before setting multiple day rates to false");
$scope.multiple_day_rates = false;
$scope.day_rate_check=true;
}
}
}
);
$scope.$watch(
"multiple_day_rates",
function( multiple_day_rates ) {
console.log("watch triggered for multiple day rates");
}
);
}
私の目標は、$scope.multiple_day_rates
が設定されたら、いくつかのコードを実行したいということです。true
からに設定されている場合も検出したいと思いtrue
ます。AngularJS はある種のダーティ チェックを行っているため (値が変更された場合にのみ監視をトリガーします) $scope.multiple_day_rates
、変更が検出されるように、事前に null に設定する必要があります。しかし、どういうわけか、$watch
1 回のダイジェスト サイクルしかできない式のように見えます。これがJSFiddleです。選択が「Purchase Order One」から「Purchase Order Two」に変更されたときに、multiple_day_rates
両方の場合と同様に何も起こらないことがわかりますtrue
。