AngularFire 0.5.0 $''更改'事件未正确触发

时间:2013-12-31 15:30:42

标签: javascript angularjs firebase angularfire

假设我有一系列我试图分页的文章。

我正在使用$on("change")事件来收听对indexlimit

的更改
.controller('articlesCtrl', ["$scope", "$firebase", "$stateParams", function($scope, $firebase, $stateParams) {

  var limit = 2;
  var index = $stateParams.id;
  var articlesRef = new Firebase("https://example.firebaseio.com/articles").startAt(null, index).limit(limit);
  var obj = $firebase(articlesRef);

  obj.$on("change", function() {
    var keys = obj.$getIndex();
    index = keys[keys.length-1];
    console.log(obj);
  });

  $scope.update = function(){
    limit = limit + 2;
    obj = $firebase(articlesRef.startAt(null, index).limit(limit));
  }

}]);

我注意到的是 - 初始加载 $on("change")事件触发两次。

并且每次后续调用更新indexlimit都不会触发$on("change")事件。

<button type="button" ng-click="update();">Update</button>

1 个答案:

答案 0 :(得分:2)

每次触发$ scope.update时,都会将obj变量分配给新引用。但是,您只能将obj.$on(change)附加到原始obj

这可能会通过一些实验进行优化;这是一个让你开始的快速蛮力:

var limit = 2;
var index = $stateParams.id;
var articlesRef = new Firebase("https://example.firebaseio.com/articles");

$scope.update = update;
update(); // initialize

function update(){
   limit = limit + 2;
   var obj = $firebase(articlesRef.startAt(null, index).limit(limit));
   obj.$on("loaded", function() {
      var keys = obj.$getIndex();
      index = keys[keys.length-1];
      console.log(obj);
   });
}