2013-09-05 12 views
9

Angular.js veri modelimde "ng-init" yönergesinde "data.id" değerini ilklendiren bir yönergem var. Şimdi bunun nasıl çalıştığını değiştiremediğimi söyleyelim.ng-init değerlerinin ayarlanmasını beklemenin doğru yolu nedir?

Şimdi, sayfam yüklenir yüklenmez, URL'nin bu data.id değerine bağlı olduğu bir HTTP isteği oluşturmak istiyorum. Şimdiye kadar, şu iş gibi görünüyor: Ancak

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

    $scope.data = {}; 

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

, aksak görünüyor sıfır zaman aşımı ile bir zamanlayıcı kullanarak. (Ve eğer $ timeout kodunu çıkarırsam ve doğrudan $ http.get'i doğrudan çağırırsam, o zaman $ scope.data.id tabiki tanımsızdır).

$ http isteği gönderilmeden önce ng-init çalışmasını beklemenin daha iyi bir yolu var mı? Ve zaman aşımı tabanlı kod, tüm durumlarda/tüm tarayıcılarda vb.

+0

kullanmayı deneyebilirsiniz. Bu çok daha "açısal" bir yaklaşım imho – Anton

cevap

5

Bunu ayarlamak değil, ben senin model ya da denetleyici verilerine bakan ve görünüm sadece verileri yansıtan öneririm A seyretmek

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

Teşekkürler! Bu işe yarıyor ve cevabı kabul ettim. Sorunun ikinci kısmına bir cevap olup olmadığını merak ediyorum ($ timeout kodunu sakladım, işe yarayacak mı yoksa sadece işe mi geliyor?) –

+0

SO üzerinde bu tartışmaya bir bak. http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful#comment14183689_779785. Umarım yardımcı olur :) Önemli bir gecikme varsa işe yaramaz. – Chandermani

+0

Ancak data.id her seferinde bu şey tetiklenecek, sadece init değil, değil mi? – Serge

İlgili konular