2017-03-21 2 views
0

Ich habe Funktion wie diese in der Steuerungng-init aufgerufen, bevor API-Antwort

this.getStates = function() { 
       LoadingService.enableLoading(); 
       CartService.getStates(self.customerDetails.Country).then(function (response) { 
        response = response.data; 
        self.states = response.State; 
        LoadingService.disableLoading(); 
       }).catch(function (response) { 
        console.log(response); 
        LoadingService.disableLoading(); 
       }); 
      }; 

und meiner Meinung nach macht es auf diese Weise

hier ist der Template-Code

<select required id='country' class="form-control" ng-model="checkoutCntrl.customerDetails.Country" ng-init="checkoutCntrl.customerDetails.Country = checkoutCntrl.countries[107]" 
       ng-options="item.CountryCode as item.CountryName for item in checkoutCntrl.countries track by item.CountryCode" 
       ng-select="checkoutCntrl.getStates()" ng-change="checkoutCntrl.getStates()"> 
     </select> 

Ich wollte das Standardland auswählen, wie wähle ich es aus. wenn ich Funktion innerhalb ng-init verwenden aufgerufen wird, bevor wir die Daten vom Server

hier ist der nächste Code nach dem Einstellen des Landes Wert zu erhalten versuchen Staaten

this.getStates = function() { 
       console.log('obj=====>'); 
       console.log(self.customerDetails.Country.CountryCode); 
       LoadingService.enableLoading(); 
       CartService.getStates(self.customerDetails.Country).then(function (response) { 
        response = response.data; 
        self.states = response.State; 
        LoadingService.disableLoading(); 
       }).catch(function (response) { 
        console.log(response); 
        LoadingService.disableLoading(); 
       }); 
      }; 

zu holen, wo self.customerDetails.Country ist kommt als Objekt

+1

Bitte helfen Sie Ihre Vorlage Code. – WorkWe

Antwort

0

ng-init wertet den Ausdruck nur einmal aus. Da Ihre Anfrage asynchron ist, ist Ihre Anfrage bereits erfolgreich. Ng-init wird bereits ausgewertet. Eine bessere Möglichkeit, Ihre Variable zu initialisieren, wäre dieser Rückruf in Ihren Erfolg

checkoutCntrl.customerDetails.Country = checkoutCntrl.countries[107]; 

zu schreiben und wenn Sie nicht möchten, dass Ihre wählen Sie vor der Anforderung angezeigt werden, sollten Sie die Richtlinie nur mit ng-wenn zu machen, wenn Ihre Bedingung ist erfüllt. Zum Beispiel

<div ng-if="showMeOnSuccessfulRequest" >Content...</div> 

CartService.getStates(self.customerDetails.Country).then(function (response) { 
       response = response.data; 
       self.states = response.State; 
       $scope.showMeOnSuccessfulRequest = true; 
       LoadingService.disableLoading(); 
      }).catch(function (response) { 
       console.log(response); 
       LoadingService.disableLoading(); 
      }); 
+0

Wenn ich das mag, wird der Wert gesetzt, aber wenn ich versuche hinein zu kommen, kommt es als Objekt statt als Wert. Wenn ich etwas anderes wähle, dann sende ich nur den Wert anstelle des Objekts –

+0

und es gibt ein anderes Problem, dass, wenn Sie eine andere Option nach der Auswahl aus dem Controller auswählen leere Option –

+0

können Sie das Szenario, das Sie arbeiten, kurz, so dass ich könnte das richtige Beispiel liefern, das Ihnen helfen wird, es besser zu verstehen. –

Verwandte Themen