Skip to content

Instantly share code, notes, and snippets.

@davidpp
Created June 22, 2015 14:57
Show Gist options
  • Save davidpp/d26f4baa5ef324573161 to your computer and use it in GitHub Desktop.
Save davidpp/d26f4baa5ef324573161 to your computer and use it in GitHub Desktop.
js-data binding for firebase. Posted by @jmdobry on Gitter.
angular.module('firebase-example', ['js-data', 'ngRoute'])
.config(function (DSFirebaseAdapterProvider, $routeProvider) {
var basePath = 'https://js-data-firebase.firebaseio.com';
DSFirebaseAdapterProvider.defaults.basePath = basePath;
$routeProvider.when('/user/:id', {
controller: 'UserCtrl',
controllerAs: 'UserCtrl',
template: 'routes/user/user.html',
resolve: {
user: function ($route, User) {
return User.find($route.current.params.id);
}
}
});
})
.run(function (DS, DSFirebaseAdapter, User) {
// js-data-angular created a new store
// automatically and registered it as DS.
// The firebase adapter was already registered,
// but we want to make it the default.
DS.registerAdapter(
'firebase',
DSFirebaseAdapter,
{ default: true }
);
})
.service('User', function (DS, DSFirebaseAdapter) {
return DS.defineResource('user');
})
.controller('UserCtrl', function ($scope, $routeParams, User, DSFirebaseAdapter) {
var UserCtrl = this;
// Update the user on the controller whenever
// the user changes
User.bindOne({}, $scope, 'UserCtrl.user');
function handleUserChange (dataSnapshot) {
var user = dataSnapshot.val();
if (user[Resource.idAttribute] && user[Resource.idAttribute] == $routeParams.id) {
User.inject(user);
}
}
var ref = DSFirebaseAdapter.ref.child(Resource.endpoint);
ref.on('child_changed', handleUserChange);
$scope.$on('$destroy', function () {
ref.off('child_changed', handleUserChange);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment