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
   230   231   232   233   234   235   236   237   238   239   240