Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
    <script src="https://rawgit.com/angular/bower-angular/master/angular.min.js"></script>
  <script src="https://cdn.firebase.com/js/client/2.3.1/firebase.js"></script>
  <script src="https://cdn.firebase.com/libs/angularfire/1.1.3/angularfire.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body ng-app="app">
  <div ng-controller="MyCtrl">
    
    <ul ng-repeat="message in messages">
      <li> {{ message.text }} </li>
    </ul>
    
  </div>
</body>
</html>
 
angular.module('app', ['firebase'])
  .constant('FBURL', 'https://testbase.firebaseio-demo.com')
  .service('Ref', ['FBURL', Firebase])
  .controller('MyCtrl', MyController)
  .factory('limitMessages', LimitMessagesArray)
  .factory('startAtMessages', StartAtMessagesArray);
function LimitMessagesArray(Ref, $q) {
  // return a function so we can alter the limit amount
  return function LimitMessagesArray(lastLimit) {
    var limitQuery = Ref.child('messages').limitToLast(lastLimit);
    // Since it's a one time read we'll use a promise
    var deferred = $q.defer();
    // Reading only once is necessary
    limitQuery.once('value', function(snap) {
      var newMessages = [];
      // iterate through the snapshot and keep the key around
      snap.forEach(function(childSnap) {
        var newMessage = childSnap.val();
        newMessage.$key = childSnap.key();
        newMessages.push(newMessage);
      });
      // resolve the last 'N' messages
      deferred.resolve(newMessages);
    });
    return deferred.promise;
  };
}
function StartAtMessagesArray(Ref, $firebaseArray) {
  return function StartAtMessagesArray(startingKey) {
    var rangeQuery = Ref.child('messages').orderByKey().startAt(startingKey);
    return $firebaseArray(rangeQuery);
  };
}
function MyController($scope, limitMessages, startAtMessages, Ref) {
  var lastThreeMessages = limitMessages(3);
  // When the last three messages load get the first key
  lastThreeMessages.then(function(data) {
    var startingKey = data[0].$key;
    // Create the sync array of messages from the starting key
    $scope.messages = startAtMessages(startingKey);
  });
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers