Search code examples
javascriptangularjsangularjs-scopeangularjs-ng-repeatng-bind

ng-repeat / ng-bind wont show my data


The problem that i am getting is that my ng-repeat / ng-bind won't show the data inside $scope.articles. while in the console i get the data im expecting. I now made a code snippit so it's easier to discover the problem.

var App = angular.module('App', []);
App.controller('WebCtrl', function($scope, $http) {

  $scope.start = [{
    "id": 1,
    "text": "test1"
  }, {
    "id": 2,
    "text": "test2"
  }, {
    "id": 3,
    "text": "test3"
  }, {
    "id": 4,
    "text": "test4"
  }];
  $scope.articles = $scope.start;

  $http.get('/')
    .then(function() {
      $scope.menu = function(id) {
        $scope.articles = $scope.start[id];
        console.log($scope.articles);
      }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!doctype html>
<html ng-app="App">

<head>
  <meta charset="utf-8">
  <title>Todos $http</title>
  <script src="app.js"></script>
</head>

<body ng-controller="WebCtrl">
  <ul>
    <li style="list-style: none">
      <button ng-click="menu(0)">1</button>
      <button ng-click="menu(1)">2</button>
      <button ng-click="menu(2)">3</button>
      <button ng-click="menu(3)">4</button>
    </li>
  </ul>

  <ul>
    <li style="list-style: none" ng-repeat="article in articles">
      {{article.text}}
    </li>
  </ul>
</body>

</html>


Solution

  • Your code starts with an articles object pointing to an array. Inside menu, it gets replaced by an object. ng-repeat iterates over its keys.

    I guess the main change would be:

    $scope.articles = $scope.start.slice(id, id + 1);
    

    var App = angular.module('App', []);
    App.controller('WebCtrl', function($scope, $http) {
    
      $scope.start = [{
        "id": 1,
        "text": "test1"
      }, {
        "id": 2,
        "text": "test2"
      }, {
        "id": 3,
        "text": "test3"
      }, {
        "id": 4,
        "text": "test4"
      }];
      $scope.articles = $scope.start;
    
          $scope.menu = function(id) {
            $scope.articles = $scope.start.slice(id, id + 1);
            console.log($scope.articles);
          }
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <!doctype html>
    <html ng-app="App">
    
    <head>
      <meta charset="utf-8">
      <title>Todos $http</title>
      <script src="app.js"></script>
    </head>
    
    <body ng-controller="WebCtrl">
      <ul>
        <li style="list-style: none">
          <button ng-click="menu(0)">1</button>
          <button ng-click="menu(1)">2</button>
          <button ng-click="menu(2)">3</button>
          <button ng-click="menu(3)">4</button>
        </li>
      </ul>
    
      <ul>
        <li style="list-style: none" ng-repeat="article in articles">
          {{article.text}}
        </li>
      </ul>
    </body>
    
    </html>