如何解决angularjs中的闭包问题

时间:2014-11-04 07:43:42

标签: javascript jquery angularjs closures

我在angularjs中有一个示例待办事项应用程序。我的待办事项列表是一个数组。但是每次只有数组项的最后一个值被添加到li的内容。

我已经在jsbin上复制了这个问题。

http://jsbin.com/simafuzidi/3/edit

我希望todo项的列表包含在文本框中键入的所有字段,而不仅仅是最后一个字段。我知道这是一个关闭问题但我不确定如何在当前情况下解决这个问题。

感谢

$scope.addTodo = function() {
  $scope.todos.push({text:$scope.todoText1,text:$scope.todoText2,text:$scope.todoText3,text:$scope.todoText4,done:false});
  $scope.todoText1 = '';
  $scope.todoText2 = '';
  $scope.todoText3 = '';
  $scope.todoText4 = '';
};




<form ng-submit="addTodo()">
        <input type="text" ng-model="todoText1"  size="30"
               placeholder="add new todo here1"><br />
        <input type="text" ng-model="todoText2"  size="30"
               placeholder="add new todo here2"><br />
        <input type="text" ng-model="todoText3"  size="30"
               placeholder="add new todo here3"><br />
         <input type="text" ng-model="todoText4"  size="30"
               placeholder="add new todo here4"><br />
         <input class="btn-primary" type="submit" value="add">
      </form>

2 个答案:

答案 0 :(得分:1)

您应该在JSBIN中看到控制台错误,然后通过Does JSON syntax allow duplicate keys in an object?

  

第8行:复制键'text'。

代码

$scope.todos = [
  {todoText1:'learn angular', 
   done:true
  },
  {
    todoText1:'build an angular app', done:false
  }];
$scope.addTodo = function() {
  $scope.todos.push(
    {
      todoText1:$scope.todoText1,
      todoText2:$scope.todoText2,
      todoText3:$scope.todoText3,
      todoText4:$scope.todoText4,
     done:false
    });
  $scope.todoText1 = '';
  $scope.todoText2 = '';
  $scope.todoText3 = '';
  $scope.todoText4 = '';
};

HTML

  <ul class="unstyled">
    <li ng-repeat="todo in todos">
      <input type="checkbox" ng-model="todo.done">
      <span class="done-{{todo.done}}">{{todo.todoText1}} {{todo.todoText2}} {{todo.todoText3}} {{todo.todoText4}}</span>
    </li>
  </ul>

DEMO

答案 1 :(得分:0)

我相信你的推送声明应该是这样的。

  $scope.todos.push({text:$scope.todoText1,done:false},{text:$scope.todoText2,done:false},{text:$scope.todoText3,done:false},{text:$scope.todoText4,done:false});

如果你想推送所有商品。