将Firebase对象与当前范围分离

时间:2013-11-11 15:57:36

标签: javascript angularjs firebase angularfire

假设我有一个项目列表:

list.html

<div ng-repeat="item in items">
  <span ng-click="editItem(item)">{{item.title}}</span><br>
</div>

我想编辑其中一个:

.controller('adminCtrl', ["$scope", "angularFireCollection", function($scope, angularFireCollection) {

  var ref = new Firebase("https://example.firebaseio.com/articles");
  $scope.items = angularFireCollection(ref);

  $scope.editItem = function(item){
    $scope.item = item;
    $scope.updateView('form');
  }

  $scope.updateItem = function(item){
    $scope.items.update(item);
    $scope.updateView('list');
  }

  $scope.goBack = function(){
    $scope.updateView('list');
  }
}]);

点击editItem(item)切换form.html部分:

form.html

<div>
  <button type="button" ng-click="goBack()">Go Back</button>
  <input type="text" ng-model="item.title">
  <button type="button" ng-click="updateItem(item)">Save</button>
</div>

如果我在goBack()之前编辑我的当前项目和updateItem(item),那些更改会在本地传播 - 但显然不应该因为我还没有更新记录。

如何通过editItem(item)从其设置的$scope.item变量中分离传入的firebase对象?

2 个答案:

答案 0 :(得分:1)

Chandermani的观点是正确的,但你必须破解克隆的方式:
var clonedItem = angular.fromJson(angular.toJson(item));

这会有效!

答案 1 :(得分:0)

尝试在编辑中使用angular.clone()方法创建项目的克隆,看看它是否有效

  $scope.editItem = function(item){
    $scope.item = angular.copy(item);
    $scope.updateView('form');
  }