在AngularJS中编写待办事项列表时无法理解删除过程

Posted

技术标签:

【中文标题】在AngularJS中编写待办事项列表时无法理解删除过程【英文标题】:Not able to understand the deleting process while writing todo list in AngularJS 【发布时间】:2017-02-17 18:45:38 【问题描述】:

我正在尝试使用以下代码在 Angularjs 中编写待办事项应用程序。

function write_controller($scope)
  $scope.todos = [text:'hey all',done:false, 
                 text:'hello',done:false];
  $scope.addtodo = function()
  $scope.todos.push(text:$scope.todopush,done:false);
    $scope.todopush = '';
  
  $scope.delete = function()
    var oldtodos = $scope.todos;
    $scope.todos = [];
    angular.forEach(oldtodos, function(x)
      if (!x.done)
        $scope.todos.push(x);
    );
  ;
<html ng-app>
    <head>
     <script src =  
     "https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js">   
      </script>
      </head>
      <body>
      <div class = "basic_class" ng-controller = "write_controller">
      <ul>
        <li ng-repeat = "todo in todos"><input type = "checkbox" ng-model  
         ="todo.done">todo.text</input></li>
      </ul>
      <input type = "text"
        placeholder = "please add data here"
        ng-model="todopush">
      </input>
      <input type = "button" ng-click ="addtodo()" value ="Click me!!"></input>
      <input type = "button" ng-click = "delete()" ng-model="remove" value =  
       "remove!"></input>
      </div>
</body>
</html>

在下面的代码中,我有以下问题。 删除操作是如何工作的??

我的理解: 1)它将现有数组推入一个新数组 2)它清除现有数组 3) 遍历新数组 3)检查完成的功能??? (当它说 !x.done 时,是真的还是假的???) 任何帮助将不胜感激。

【问题讨论】:

这段代码是你做的吗?根据代码删除不起作用 @Sajeetharan 为什么不...适合我 如果您要共享代码,请使用 jsfiddle 或类似的东西。 @charlietfl 是的,我又经历了一次,我假设 oldtodos 是 todos 请注意,您使用的是非常旧的 Angular 版本,如果您要升级,则必须将控制器声明为模块的一部分。很久以前就放弃了对全局函数的支持 【参考方案1】:

完成这些步骤

$scope.delete = function() 
    // store existing todos array in variable
    var oldtodos = $scope.todos;
    // create new empty array for todos
    $scope.todos = [];
    // loop over previously stored todos
    angular.forEach(oldtodos, function(x) //x is element of the array - a single todo object
      // if x.done is not truthy
      if (!x.done)
       // push this item into `$scope.todos`
       $scope.todos.push(x);
    );

基本上它只会将done:false 推送到$scope.todos 的新版本中,从而有效地删除done:true

【讨论】:

在一个复选框上单击,完成如何从假更新为真??? ng-model ="todo.done" 见:docs.angularjs.org/api/ng/directive/ngModel 简短回答是ng-model 绑定到数据模型对象,并且会在复选框更改时更改

以上是关于在AngularJS中编写待办事项列表时无法理解删除过程的主要内容,如果未能解决你的问题,请参考以下文章

无法在初始渲染中显示待办事项列表

无法从 Listview 中删除项目(待办事项列表),长按没有任何反应

JavaScript/HTML 中的待办事项列表

如何让 splice() 方法在我的待办事项列表中工作?

数据库中的待办事项列表项更新不适用于 Django

ios - 如何在 iPad 中创建待办事项列表 [关闭]