1

我是 AngularFire 的新手,正在尝试理解一个简单的概念。如果您通过位于以下网址的 AngularFire 教程:http: //angularfire.com/tutorial/index.html#gettingstarted有一个使用 AngularFire 构建原始“聊天”应用程序的基本示例。

该教程非常简洁明了,但我不明白其中的一个要点:

 function MyCtrl($scope, angularFire){
    $scope.messages = [];
    var ref = new Firebase("https://<xxxxxx>.firebaseio.com/messages");
    angularFire(ref, $scope, 'messages');
    $scope.messages = []; //shouldn't this clear the data locally and remotely?
 }

问题是首先创建了一个模型,然后设置了 AngularFire 的绑定魔法,这样现在就有了一个与模型的 3 路绑定。如果 Firebase 中已经存储了一组数据,则会获取并同步该数据,您的模型现在将在本地拥有这些数据。

我根本不明白的是,当控制器代码运行时,假设我在 angularFire 绑定连接后将模型设置为空数组,为什么 Firebase 数据没有被清除?没关系,刷新页面基本上会一直清除数据(我想要的行为)。

现在,如果我将 ng-click 事件连接到一个按钮,我可以让这个行为起作用,该按钮调用在我的 $scope 对象上定义的名为 clear 的方法。如果在该方法内,我只需调用:$scope.messages = [];,然后我的模型在本地和远程清除。

但是为什么这对初始化不起作用?

帮助总是受到赞赏。

4

2 回答 2

0

我猜远程数据尚未返回,并在您第二次调用 $scope.messages =[] 后填充

编辑:为什么不在将数据绑定到本地列表之前从 FB 中明确删除数据。

var ref = new Firebase("https://<xxxxxx>.firebaseio.com/messages");
ref.remove();
于 2013-09-20T03:21:08.787 回答
0

我想我可能已经找到了自己问题的答案。看起来,您必须等到承诺返回才能真正开始修改模型。现在,每当我刷新页面时,当我的 .then() 运行时,它都会清除我的数据。

我想这应该是这样做的。任何人都可以确认吗?

 $scope.messages = [];
 var ref = new Firebase("https://<xxxxxx>.firebaseio.com/items");
 var prom = angularFire(ref, $scope, 'messages');
 prom.then(function(){
     console.log("data loaded");
     $scope.messages = [];
 });
于 2013-09-20T04:04:44.667 回答