Skip to content

Instantly share code, notes, and snippets.

@pc035860
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pc035860/9579484 to your computer and use it in GitHub Desktop.
Save pc035860/9579484 to your computer and use it in GitHub Desktop.
`fireutil` module for powering up `angularFire` https://github.com/firebase/angularFire

fireutil

A collection of utilities for making your life with angularFire better.

$firebaseArr

Reference: FirebaseExtended/angularfire#200 (comment)

Generate $firebase object of an array type, which can be used with handy angular filters.

$scope.list = $firebaseArr(ref);

expect(Object.prototype.toString.call($scope.list)).toEqual('[object Array]');

firebaseRef

A easier way to get Firebase reference by concatenating firebase routes.

/*global angular*/
angular.module('fireutil', ['firebase'])
// Ref: https://github.com/firebase/angularFire/issues/200#issuecomment-31905575
.factory('$firebaseArr', ['$firebase', '$filter', '$log', function($firebase, $filter, $log) {
return $firebaseArr;
function $firebaseArr(ref) {
var dataObj = $firebase(ref);
var dataArr = angular.extend([], dataObj);
dataObj.$on('change', function() {
dataArr.length = 0;
angular.extend(dataArr, $filter('orderByPriority')(dataObj));
});
/**
* Destroy the $firebaseArr object
*/
dataArr.$destroy = function () {
dataObj.$off();
};
/**
* Create $firebaseArr object from a child
* @param {string} name child's name
* @return {$firebaseArr object}
*/
dataArr.$childArr = function(name) {
var ref = dataObj.$getRef().child(name);
return $firebaseArr(ref);
};
return dataArr;
}
}])
.factory('firebaseRef', function (Firebase) {
/**
* Firebase reference generator
*
* @usage
* var refFunc = firebaseRef(rootUrl);
* refFunc(); // "{BASE}" reference
*
* refFunc('a', 'b', 'c'); // "{BASE}/a/b/c" reference
* refFunc(['a', 'b', 'c']); // same as above
*/
return function firebaseRef(rootUrl) {
var _rootRef = new Firebase(rootUrl);
return function ref(path) {
if (!angular.isArray(path)) {
path = Array.prototype.slice.call(arguments);
}
if (!path || path.length === 0) {
return new Firebase(rootUrl);
}
return _rootRef.child(path.join('/'));
};
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment