在DOM中动态重新加载ng-repeat数据

时间:2013-11-13 11:45:51

标签: javascript angularjs angularjs-ng-repeat angular-ui

我在视图中有以下代码:  

<li ng-repeat="i in items">{{i.id}}</li>

我希望在ng-repeat添加/删除新值时动态触发items。就像在,如果一个新元素被添加到items的开头那么它应该在开始时动态地呈现给DOM,同样如果一个元素添加到items的结尾那个项应该是呈现为最后一个列表项。这种DOM的动态变化是否可能是有角度的?

2 个答案:

答案 0 :(得分:10)

ng-repeat应该以这种方式开箱即用。但是,您需要pushunshift进入数组,以便启动正确的监视。 Angular将通过引用跟踪数组。

这是working plunker

HTML:

<html ng-app="myApp">

  <head>
    <script data-require="angular.js@*" data-semver="1.2.0" src="http://code.angularjs.org/1.2.0/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-controller="Ctrl">
    <h1>Hello Plunker!</h1>
    <div ng-repeat="item in items">
      {{ item }}
    </div>
    <button ng-click="add()">Add</button>
  </body>

</html>

JS:

var myApp = angular.module('myApp', []);

myApp.controller('Ctrl', function($scope) {

    $scope.items = ['hi', 'hey', 'hello'];

    $scope.add = function() {

      $scope.items.push('wazzzup');
    }
  });

答案 1 :(得分:1)

您可以使用$ scope的$ rootScope intead来设置属性项。

这种方式属性是全局的,将会更新。

myApp.controller('Ctrl', function($scope, $rootScope) {

    $rootScope.items = ['hi', 'hey', 'hello'];

    $scope.add = function() {
        $rootScope.items.push('wazzzup');
    }
});