Skip to content

Instantly share code, notes, and snippets.

@oi-sendai
Created November 10, 2014 14:34
Checkbox Persistance Directive with Firebase
//html
/*
<tasted beer="{{beer.$id}}" />
*/
var TastedDirective = angular.module('TastedDirective', []);
TastedDirective
.directive( 'tasted', function($rootScope, $q, TastedFactory) {
return {
restrict: 'AE',
replace: true,
template: '<input type="checkbox" ng-model="result" ng-change="tick()" />',
controller: 'TastedController',
scope: {
beer: '@beer',
result: '@result'
},
link: function(scope, elem, attrs) {
var beer = scope.beer;
TastedFactory.result(beer).then(function(data){
console.log('then',data);
scope.result = data;
});
}
}
})
.controller( 'TastedController', function($rootScope, $scope, $q, $firebase){
$scope.tick = function(){
var firebase_url = 'https://brilliant-fire-7870.firebaseio.com/';
var tasted = $scope.result;
var beerID = $scope.beer;
var currentUser = $rootScope.firebaseUser.uid;
var dataObject = { tasted: tasted };
var endpoint = new Firebase(firebase_url + 'tasting/' + currentUser + '/' + beerID);
endpoint.set(dataObject);
}
});
App.factory("TastedFactory", function($rootScope, $q, $http, $firebase) {
var factory = {};
var helper = {};
var firebase_url = 'https://brilliant-fire-7870.firebaseio.com/';
factory.result = function (beerID) {
var currentUser = $rootScope.firebaseUser.uid;
var endpoint = new Firebase(firebase_url + 'tasting/' + currentUser + '/' + beerID);
var deferred = $q.defer();
endpoint.once('value', function(snapshot){
var foo = snapshot.val() || false;
if(foo.tasted){
console.log('tasted');
deferred.resolve(true);
}
else {
console.log('not tasted');
deferred.resolve(false);
}
});
return deferred.promise;
};
return factory;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment