2016-11-25 2 views
1

zu binden Ich habe versucht, die Beispiele auf Stackoverflow gefunden, aber ich immer noch nichts aus meiner Sicht. Ich kann die articleIds in der Konsole sehen, aber nichts in der Ansicht. Vielen Dank im Voraus für Ihre Hilfe.Ich kann Versprechen Daten nicht in angularjs

Hier ist mein Controller:

export class MainController { 
    constructor ($http) { 
     'ngInject'; 

     this.$http= $http; 
     this.apiHost = 'http://localhost:5005/api/articles'; 
     this.getArticles(); 
    } 

    getArticles() { 
     var vm = this; 
     this.$http.get(this.apiHost).then(function(result){ 
      vm.articles = result.data; 
      vm.articles.forEach(function(item){ 
       console.log(item.articleId); 
      });  
     }); 
    } 
} 

Hier ist meine Ansicht:

<div class="form-group"> 
    <label for="resumeId">Select article:</label> 
    <select class="form-control" id="resumeId"> 
    <option ng-repeat="item in main.vm.articles" value="{{item.articleId}}">{{item.articleId }}</option> 
    </select></div> 
+0

Ich füge main.vm.articles hinzu, weil die route controllerAs verwendet: 'main' – Fred

+0

Hast du 'ng-repeat =" item in articles "'? Von dem, was ich sagen kann, sollte das funktionieren. – MeterLongCat

+0

Vielen Dank! ng-repeat = "item in main.articles" funktioniert – Fred

Antwort

1

Das hat nichts mit dem Versprechen zu tun hat, die HTML verweist nur den falschen Umfang. Im $ http-Callback weisen Sie das Ergebnis vm.articles zu (wobei vm der Bereich der Steuerung ist), so dass articles unter main.articles anstatt main.vm.articles verfügbar ist.

Ändern Sie Ihre ng-repeat zu ng-repeat="item in main.articles" und es wird funktionieren.

+0

Nicht (vm == dies), ändern Sie einfach den Code zu ng-repeat = "Element in main.articles" – Fred

+0

Was ich versuchte zu erklären, ist, dass "vm" der Bereich des Controllers ist. Habe die Frage aktualisiert, um dies zu verbessern. – MeterLongCat

Verwandte Themen