2013-05-03 9 views
10

私はちょうどコントローラのサービスからjsonデータを取得しています。

そして、私はロードされたときに成功メッセージを印刷するためにコールバック関数を使用しています。その間、タイムアウトと間隔が行く、コードの実行(ブロックスレッド)を一時停止するだけでなくconfirmpromptとして、正常に動作しているが、それはまた、私が質問

//JSON file 
{ 
"pc":"name" 
} 

// angular services 
var service = angular.module('Services', ['ngResource']). 
factory('Widgets', function($resource){ 
    return $resource('/json/home.json', {}, { 
     query: {method:'GET', params:{}, isArray:false} 
    }); 
}); 

//controller 
function editWidget($scope, Widgets) { 
$scope.data = Widgets.query(function(data) { 
    alert("Success Data Loaded ---> " + JSON.stringify(data.pc)); 
}); 
} 
+1

このコードは何も問題はありません - あなたの問題は別の場所に位置しなければなりません。 '$ scope。$ apply(...)'を実行すると、通常、このエラーメッセージが表示されます – joakimbl

+0

警告は失敗していますか?アラートによって問題が発生した場合は、console.logを使用してjsonの値を確認してください。 – BoxerBucks

+0

@BoxerBucksはい私はconsole.logを使用しているときにエラーをスローしていません。しかし、私はエラーの原因を知りたかっただけです。 –

答えて

12

alertに記載されたエラーを投げています休止中にトリガーされたはずのものであれば、すごくうんざりです。 $digestループは、$evalAsyncキューと$watchリストを処理する2つの小さなループで構成されています。 $evalAsyncキューは、現在のスタックフレームの外で発生する必要がある作業をスケジュールするために使用されますが、ブラウザのビューがレンダリングされる前に実行されます。これは通常setTimeout(0)で行われます。この間のアラートによって問題が発生します。

+0

これは間違いなく問題ですが、アラートを使用しない以外の解決策がありますか? – RAC

+0

ノンブロッキングアラート(モーダル)を使用します。 window.alertをオーバーライドしてモーダルを呼び出すこともできます。モーダルアラートをスタイルすることもでき、ネイティブアラートよりも見栄えがよくなります。 – TheSharpieOne

10

ダイジェストサイクルが完了した後にアラートを実行すると、このエラーを回避できます。

$timeout(function() { 
    alert('Alert text'); 
}); 

はまた、いずれの場合も、偽あなたのディレクティブ

0
if(!confirm('Your message')){ 
    return false; 
}else { 
    return false; 
} 

リターンに$タイムアウトを注入することを忘れないでください。

-2

@TheSharpieOneが正しいです、それは私の仕事です。

function delayalert(messagestr){ 
 
      setTimeout(function(){ 
 
       alert(messagestr); 
 
      },0); 
 
}

関連する問題