【问题标题】:How to delete a Firebase Object based on it Property:key value?如何根据其属性删除 Firebase 对象:键值?
【发布时间】:2015-08-31 15:58:14
【问题描述】:

我刚开始使用 AngularJs 和 Firebase。我正在创建一个待办事项列表应用程序。

在我的应用程序中,我有一个像这样的 html 表单:

<form name="frm" ng-submit="addTodo()" id="form-border">
    <div class="form-inline">
      <input type="text" class="form-control" name="newtodo" ng-model="newtodo" required="" id="inputform" />
      <button class="btn btn-success" ng-disabled="frm.$invalid">Go</button>
      <button class="btn btn-danger" ng-click="clearCompleted(todo)">Clear Completed</button>
    </div> <!-- end form group -->
  </form>

表单下方是 html 无序列表中的实际“待办事项”任务,通过上面的表单添加。

代码示例:

<li ng-repeat="todo in todos" ng-mouseenter="hover = true" ng-mouseleave="hover = false" class="list-group-item" ng-class="inactive" >
      <input type="checkbox" ng-model="todo.done" ng-click="clickDone(todo)"/>
      <span ng-class="{'done':todo.done}" id="donetask">{{todo.title}}</span><!-- add line-through when task is done-->
      <ng-include ng-class="{'hiRank-off': !hover}" src="'rankbutton.html'"></ng-include><!-- ng-include rankbutton-->
    </li>

我的 app.js 正在使用 Firebase 存储这些数据:

var myData = new Firebase("https://firebaseio-demo.com/ToDos");

$scope.todos.$add({'title':$scope.newtodo,'done':false, 'timetag': datecreated}); //push to Array 

    $scope.newtodo = '';

我正在标记我的任务已完成 clickDone(todo),它从我的 ng-repeat 中获取变量“todo”。像这样:

$scope.clickDone = function(todo){
    $scope.todos.$save(todo); //saves todo state when is checked
  };  

我的困境是我试图用我的 ng-click="clearCompleted(todo)" 删除一个对象,或者换句话说,它被标记为完成。 可以在第一个代码块中找到 但我认为 clearCompleted() 函数不在 ng-repeat="todo in todos" 范围内,所以我在使用此函数删除对象时遇到了一些麻烦。

我正在尝试删除,但没有成功和错误

TypeError: 无法读取未定义的属性“完成”

$scope.clearCompleted = function($scope.todos){
    $scope.todos.$remove($scope.todo.done);
  };

【问题讨论】:

    标签: javascript angularjs angularjs-scope firebase angularfire


    【解决方案1】:

    我刚刚想通了!!我必须运行 forEach() 方法来查看 $scope.todos 并检查 todo.done 是否评估为 true。

     $scope.clearCompleted = function(){ $scope.todos.forEach(function(todo){ if(todo.done){ $scope.todos.$remove(todo); } }); };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多