2013-09-05 2 views
9

У меня есть директива «ng-init» в моем HTML, которая инициализирует значение «data.id» в моей модели данных Angular.js. Скажем, пока я не могу изменить, как это работает.Каков правильный способ ожидания значений 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, конечно, не определено).

Есть ли лучший способ подождать до выполнения ng-init перед выдачей запроса $ http? И гарантируется ли код с тайм-аутом выше во всех случаях/во всех браузерах и т. Д.?

+0

я хотел бы предложить вашу модель или контроллер ищет после того, как данные и вид просто отражает данные, не устанавливая его. это гораздо более «угловой» подход imho – Anton

ответ

5

Вы можете попробовать использовать часы

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

Спасибо! Это похоже на работу, и я принял ответ. Мне любопытно, есть ли ответ на вторую часть моего вопроса (если бы я сохранил код тайм-аута $, гарантированно ли он работает или он просто срабатывает?) –

+0

Посмотрите на это обсуждение на SO. http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful#comment14183689_779785. Надеюсь, это поможет вам :) Это может не сработать, если есть существенная задержка. – Chandermani

+0

, но эта вещь будет срабатывать каждый раз, когда изменения data.id не только на первом куске, не так ли? – Serge

Смежные вопросы