0

我从关于 AngularJS 的 W3Schools 教程中得到了这个例子。我从绑定复选框范围的值到使用表达式做了一个小改动。我认为待办事项列表不会再更新了。但它仍然存在。是什么导致ng-repeat仅仅因为我添加了一个待办事项而触发?

http://plnkr.co/edit/Kojz2ODWDS8dFDNzjYR5?p=preview

<!DOCTYPE html>
<html>
  <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>

  <body ng-app="myApp" ng-controller="todoCtrl">

    <h2>My Todo List</h2>

    <form ng-submit="todoAdd()">
        <input type="text" ng-model="todoInput" size="50" placeholder="Add New">
        <input type="submit" value="Add New">
    </form>

    <br>

    <div ng-repeat="x in todoList">
        <input type="checkbox" ng-model="x.done"> <span>{{x.todoText}}</span>
    </div>

    <p><button ng-click="remove()">Remove marked</button></p>

    <script>
    var app = angular.module('myApp', []); 
    app.controller('todoCtrl', function($scope) {
        $scope.todoList = [{todoText:'Clean House', done:false}];

        $scope.todoAdd = function() {

            $scope.todoList.push({todoText:$scope.todoInput, done:false});
            $scope.todoInput = "";
        };

        $scope.remove = function() {
            var oldList = $scope.todoList;
            $scope.todoList = [];
            angular.forEach(oldList, function(x) {
                if (!x.done) $scope.todoList.push(x);
            });
        };
    });
    </script>

  </body>
</html>
4

1 回答 1

1

单击Add New按钮提交相应的表单,使用ng-submit="todoAdd()"它将调用此函数。这反过来会todoList在您的范围内添加一个条目。由于该数组已被修改,因此触发了角度摘要循环并更新了列表。

对您的问题的一些建议:首先,您的意思是 W3Schools,而不是 W3C(这是一个标准化组织,通常不做教程,这就是我得到古玩的原因 - 此外,您会发现很多不使用 W3Schools 的原因当 goolgin 或查看元数据时)。此外,如果您与其他代码进行比较,您应该包含它或至少链接到它。

我通过谷歌搜索找到了它,看来你唯一的改变是使用<span>{{x.todoText}}</span>而不是<span ng-bind="x.todoText"></span>. 这里的摘要周期确实没有区别。唯一的区别是,在实际替换变量之前,使用{{}}它可能首先在浏览器窗口中呈现为大括号。因此,通常最好使用ng-bind.

于 2015-08-04T16:53:56.880 回答