2017-03-31 2 views
0

Ich habe einen Typoskript-Controller mit einer Init-Methode unten. Ich bin in der Lage, alle gewünschten Daten in das Nachrichtenergebnis zu bekommen, was gut ist.Binding Daten zu einem Dropdown mit angularjs

  init() { 
        this.accountLocationService.getAccountLocationCollection(this.customerNumber) 
         .success(messageresult => { 
          this.acctLocationCollection = messageresult;          
          //alert(this.acctLocationCollection.accountlocation[0].aliasName); 
         }) 
         .error(error => { 
          alert(error); 
         }); 
       } 

Die acctLocationCollection kann unter allen Werten des aliasname in einem Drop-Down zu binden, hat zwei oder mehr Objekte und ich brauche. Wie kann ich das erreichen? Dies ist mein erstes AngularJs-Projekt.

 <div id="acctDetail"> 
      <p>Select an Account:</p> 
      <div class="selectAccount"> 
       <select class="selAccounts" name="DeliverToCustomerNumber" ng-change="" id="DeliverToCustomerNumber" 
         ng-options="ac for ac in alc.acctLocationCollection.aliasName">   
       </select> 
      </div> 
      <div id="address"> 
       <dl> 
        <dd class="acctName">{{alc.acctLocationCollection.DeliverToCompanyName}}</dd> 
        <dd class="acctNo">{{alc.acctLocationCollection.DeliverToCustomerNumber}}</dd>   
       </dl> 
      </div> 
     </div> 

Daten sieht wie folgt in console.log

object 
    accountlocation:Array[2] 
    0:object 
     aliasName:"1234" 
     deliverToCustomerNumber: "25235" 

    1:object 
     aliasName:"2345" 
     deliverToCustomerNumber: "23523" 
+0

Nur ein Hinweis - da Sie verwenden Typoskript, die Sie nicht brauchen eine 'init() 'Funktion. Sie können einfach den TypeScript-Konstruktor verwenden. (Es sei denn, Sie rufen bereits 'init() 'von Ihrem Konstruktor) :) –

+1

@BenBeck Noch besser, ab Angular 1.5.x können Sie' $ onInit() {} 'mitTypeScript verwenden und dann haben Sie nicht einmal um es von Ihrem Konstruktor aus aufzurufen. Es wird automatisch ausgelöst, wenn das Modul instanziiert wird. – Lex

Antwort

0

Sie haben kein ng-model auf Ihrem wählen haben, so dass ich nur annehmen, dass Sie das Objekt aus Ihrem acctLocationCollection speichern möchten. Um dies zu tun müssen Sie einfach Ihre ng-options strukturieren wie folgt:

<select class="selAccounts" 
     name="DeliverToCustomerNumber" 
     id="DeliverToCustomerNumber" 
     ng-model="alc.selectedAcctLocation" 
     ng-options="ac as ac.aliasName for ac in alc.acctLocationCollection"> 
</select> 

angular.module('app', []) 
 
    .controller('ctrl', function() { 
 
    this.selectedAcctLocation = {}; 
 
    this.acctLocation = [{ 
 
     aliasName: "1234", 
 
     deliverToCustomerNumber: "25235" 
 
    }, { 
 
     aliasName: "2345", 
 
     deliverToCustomerNumber: "23523" 
 
    }]; 
 
    console.log(this.acctLocation); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="ctrl as alc"> 
 
    By object: <select ng-model="alc.selectedAcctLocation" ng-options="ac as ac.aliasName for ac in alc.acctLocation"></select><br/> 
 
    By (key,value): <select ng-model="alc.selectedAcctLocation" ng-options="value as value.aliasName for (key,value) in alc.acctLocation"></select> 
 
    <div style="margin-top:10px;"> 
 
    alc.acctLocation: 
 
    <ul> 
 
     <li ng-repeat="(key,value) in alc.acctLocation">{{key}}: {{value}}</li> 
 
    </ul> 
 
    </div> 
 
    <div>selectedAcctLocation: {{alc.selectedAcctLocation | json}}</div> 
 
</div>

+0

Ich werde das jetzt versuchen. Brauche ich das ng-Modell? – user2320476

+0

So speichern Sie den vom Benutzer ausgewählten Wert, aber ja - ohne sie wird Angular Ihre Optionen nicht rendern. – Lex

+0

Danke. Ich habe Ihren Code oben versucht, und im Drop-down-Menü wurde nichts angezeigt. Es ist immer noch leer. – user2320476

Verwandte Themen