2013-09-05 5 views
9

私のAngular.jsデータモデルで "data.id"の値を初期化する私のHTMLに "ng-init"という指示があります。今のところ、私はこれがどう動くかを変えることはできないと言いましょう。ng-initの値が設定されるのを待つ正しい方法は何ですか?

ここでは、ページが読み込まれるとすぐにHTTPリクエストを行います。このURLはこのdata.id値に依存します。これまでのところ、次のように動作しているようです:

app.controller('MainCtrl', function ($scope, $http, $timeout) { 
    "use strict"; 

    $scope.data = {}; 

    $timeout(function() { 
    $http.get("/api/Something?id=" + $scope.data.id); 
    }, 0); 
}); 

しかし、ゼロのタイムアウトでタイマーを使用すると不格好なようです。 ($ timeoutコードを省略して$ http.getを直接呼び出すと、$ scope.data.idはもちろん未定義です)。

$ httpリクエストを発行する前にng-initが実行されるまで待つのが良い方法はありますか?上記のタイムアウトベースのコードは、すべての場合/すべてのブラウザなどで動作することが保証されていますか?

+0

を使用しようとすることができます。それははるかに "角の"アプローチですimho – Anton

答えて

5

私は、データとビューだけでそれを設定していない、データを反映した後に見て、あなたのモデルやコントローラを示唆している時計

$scope.$watch('data.id',function(newValue,oldValue) { 
    if(newValue) { 
    $http.get("/api/Something?id=" + $scope.data.id); 
    } 
}); 
+0

ありがとう!これはうまくいくと思われ、私は答えを受け入れました。私は私の質問の2番目の部分に答えがあるかどうか不思議です(私が$タイムアウトコードを保持していれば、動作することが保証されているのか、それともちょうどうまく動作しますか?) –

+0

SOに関するこのディスカッションをご覧ください。 http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful#comment14183689_779785あなたに役立つことを願っています:)実質的な遅れがある場合、動作しないことがあります。 – Chandermani

+0

しかし、このことはdata.idが変更されるたびに発生します。 – Serge

関連する問題