如何在我的AngularFire应用程序最初加载时清除模型?

时间:2013-09-20 00:46:23

标签: angularjs angularfire

我是AngularFire的新手,我正在尝试理解一个简单的概念。如果您浏览位于以下网址的http://angularfire.com/tutorial/index.html#gettingstarted的AngularFire教程,则有一个使用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 = [] ;,然后我的模型在本地和远程清除。

但为什么这不能用于初始化?

总是感谢帮助。

2 个答案:

答案 0 :(得分:0)

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

后填充

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

var ref = new Firebase("https://<xxxxxx>.firebaseio.com/messages");
ref.remove();

答案 1 :(得分: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 = [];
 });