Page 235 - AngularJS权威教程
P. 235
18.29 显式同步 215
序。AngularFire会在每个对象上设置一个$id属性,它引用了对象的keyname。 1
<ul ng-repeat="item in items | orderByPriority">
<li>
<input type="text" id="{{item.$id}}" ng-model="item.$priority"/> 2
{{item.name}}
</li>
</ul> 3
18.28 Firebase 事件 4
Firebase触发两类事件,我们可以在应用内用这两类事件来处理自定义逻辑。我们可以使用
$on()方法来给这两种事件类型添加事件处理程序。 5
1. loaded
6
当从Firebase收到初始数据,从一个连接初始化的时候,Firebase触发loaded事件。它会且只
会被触发一次。
7
$scope.items.$on('loaded', function() {
console.log("Items loaded");
});
8
2. change
每当有一个远程的变化数据应用于本地对象时,Firebase都会触发change事件。例如,如果 9
有另外一个用户往我们的任务列表里加了个新任务,它就会触发,如下所示:
$scope.items.$on('change', function() { 10
console.log("A change is afoot");
});
11
18.29 显式同步
12
要给一个$scope变量添加自动化的显式同步机制,可以调用$firebase服务返回对象的
$bind()方法。
13
$bind()方法自动建立了一个三向绑定,所以我们不用显式使用$add()或者$save方法在
Firebase上保存数据。
14
$scope.items.$bind($scope, "remoteItems");
$scope.remoteItems.bar = "foo"; //新的Firebase(URL + "/bar")现在是"foo"
15
$bind()方法返回了一个promise,它会从收到服务器的初始数据之后执行。这个promise会被
用一个unbind方法执行,unbind在调用时可以解除三向绑定。
16
$scope.items.$bind($scope, "remote")
.then(function(unbind) {
unbind(); 17
// 远程数据
// 没有产生变更
$scope.remote.bar = "foo";
}); 18