2015-06-18 17 views
5

Açılır listeden seçilen belirli bir kimliğe göre öğe listesi almak için sunucuya arama yapmaya çalışıyorum.Tek bir öğe için neden birden çok çağrı alıyorum?

html:

<tr ng-repeat="parent in model.waivers"> 
    <td><select ng-model="parent.ID" ng-options="object.Key as object.Value for object in model.myObject"></select></td> 
    <td><select ng-model="parent.ServiceNameID" ng-options="expectedResult.Key as expectedResult.Value for expectedResult in model.output(object.ID)"></select></td> 
</tr> 

kontrolör:

$scope.model.output = function(id) { 
     console.log(id); 
    } 

modeli: Sadece sonucunu görmek için buraya giriş am

var Model = function() { 
    this.parent = []; 
}; 

. Gerçekten yapmak istediğim şey, bu kimliğe dayanan bir liste almak.

3 masa satır varsa o zaman ne çıktısı: Her satıra sadece bir kimliği varsa beri ne beklenir

1 
2 
3 

: yerine

1 
1 
1 
2 
2 
3 
3 
1 
2 
3 
1 

.

Bu davranışa neden olanlarla ilgili herhangi bir öneriniz var mı?

Güncelleme Yani @Fieldset sorun ebeveyn her öğe için yöntem bir kez çağırarak açısal neden olduğunu bildirdi.

Bunu nasıl yapılacağına dair herhangi bir öneri, yalnızca öğenin başına bir kez yöntemini çağırıyor?

+1

neye benzer $ bakmak scope.model geliyor? –

+0

@ rodrigo-silveira modele uygun bir şey yok. Ben ekledim ama tüm denetleyiciye özgü nesneler için bir tek durak yer tutucu – Robert

+0

Açısal bir şey değişmiş olabileceğini düşündüğünüzde tüm verileri yeniden denetlemek gerekiyor. – rob

cevap

2

Kodunuz ng-yinede olduğundan, model.değiştirmelerde öğe olduğu kadar çok sayıda model çağrılır.

İsteğinizi bu şekilde sunucunuza yapamazsınız, çünkü HTTP isteğiniz zaman uyumsuz olur ve bir söz verir ve görüşünüzde söz veremezsiniz. Sen, sonra görünüm $ dürbünüyle verilerinize erişebilir olacak Denetleyiciniz ($ kapsam) verilerinizi yüklemek zorunda Daha önce veri istemek zorunda

:

kontrolörü

function($scope, $http) { 

    $scope.data = []; 

    //This is asynchronous 
    $http.get('my/path/to/my.data').success(function(data) { 
    $scope.data = data; 
    }); 

} 

DÜZENLEME:

angular.module('myApp', []).controller('myCtrl', function($scope, $http, $q) { 

    //One request per id 
    var ids = [4, 52, 65, 12, 78]; 
    var promises = []; 

    ids.forEach(function(id) { 
    promises.push($http.get('my/path/to/my.data?id='+id)); 
    }); 



    //Fill $scope.data when all requests are done 
    $scope.data = []; 

    $q.all(promises).then(function(data){ 

    $scope.data = data; 

    /** 
    * You get something wich looks like 
    * 
    * Assuming that your webservice returns a response like {id: 4, name: 'Something'} 
    * 
    * $scope.data = [ 
    * {id: 4, name: 'Something'}, 
    * {id: 52, name: 'Something else'}, 
    * {id: 65, name: 'foo'}, 
    * {id: 12, name: 'bar'}, 
    * {id: 78, name: 'foobar'} 
    * ]; 
    * 
    * So you can loop over $scope.data in your view 
    * 
    */ 

    }); 

}); 
+0

Sadece döngüdeki geçerli yinelemede kimliğim var, bu kimliği yalnızca hizmet/denetleyiciye nasıl iletirim liste seçilen kimliğe göre mi? – Robert

+0

Gönderi düzenlenmiş :-) – eroak

İlgili konular