Created
June 25, 2014 01:49
-
-
Save greggnakamura/4c9af3eb11f0386a5237 to your computer and use it in GitHub Desktop.
AngularJS, Firebase: Working with a single-node
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html class="no-js"> | |
<head> | |
<meta charset="utf-8"> | |
<title></title> | |
<meta name="description" content=""> | |
<meta name="viewport" content="width=device-width"> | |
<!-- Place favicon.ico and apple-touch-icon.png in the root directory --> | |
<!-- build:css(.) styles/vendor.css --> | |
<!-- bower:css --> | |
<!-- endbower --> | |
<!-- endbuild --> | |
<!-- build:css(.tmp) styles/main.css --> | |
<link rel="stylesheet" href="styles/main.css"> | |
<!-- endbuild --> | |
</head> | |
<body ng-app="firebaseApp"> | |
<!--[if lt IE 7]> | |
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> | |
<![endif]--> | |
<!-- Add your site or application content here --> | |
<div class="container"> | |
<div class="header"> | |
<ul class="nav nav-pills pull-right"> | |
<li class="active"><a ng-href="#">Home</a></li> | |
<li><a ng-href="#/about">About</a></li> | |
<li><a ng-href="#">Contact</a></li> | |
</ul> | |
<h3 class="text-muted">firebaseApp</h3> | |
</div> | |
<div ng-view=""></div> | |
<div class="footer"> | |
<p><span class="glyphicon glyphicon-heart"></span> from the Yeoman team</p> | |
</div> | |
</div> | |
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID --> | |
<script> | |
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | |
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | |
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | |
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | |
ga('create', 'UA-XXXXX-X'); | |
ga('send', 'pageview'); | |
</script> | |
<!--[if lt IE 9]> | |
<script src="bower_components/es5-shim/es5-shim.js"></script> | |
<script src="bower_components/json3/lib/json3.min.js"></script> | |
<![endif]--> | |
<!-- build:js(.) scripts/vendor.js --> | |
<!-- bower:js --> | |
<script src="bower_components/jquery/dist/jquery.js"></script> | |
<script src="bower_components/angular/angular.js"></script> | |
<script src="bower_components/json3/lib/json3.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/affix.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/alert.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/button.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/carousel.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/collapse.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/dropdown.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/tab.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/transition.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/scrollspy.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/modal.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/tooltip.js"></script> | |
<script src="bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/popover.js"></script> | |
<script src="bower_components/angular-resource/angular-resource.js"></script> | |
<script src="bower_components/angular-cookies/angular-cookies.js"></script> | |
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script> | |
<script src="bower_components/angular-animate/angular-animate.js"></script> | |
<script src="bower_components/angular-touch/angular-touch.js"></script> | |
<script src="bower_components/angular-route/angular-route.js"></script> | |
<script src="bower_components/firebase/firebase.js"></script> | |
<!-- endbower --> | |
<!-- endbuild --> | |
<!-- build:js({.tmp,app}) scripts/scripts.js --> | |
<script src="scripts/app.js"></script> | |
<script src="scripts/controllers/main.js"></script> | |
<script src="scripts/controllers/about.js"></script> | |
<!-- endbuild --> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="jumbotron"> | |
<h1>'Allo, 'Allo!</h1> | |
<p class="lead"> | |
<img src="images/yeoman.png" alt="I'm Yeoman"><br> | |
Always a pleasure scaffolding your apps. | |
</p> | |
<p><a class="btn btn-lg btn-success" ng-href="#">Splendid!<span class="glyphicon glyphicon-ok"></span></a></p> | |
</div> | |
<div class="row marketing"> | |
<input type="text" class="form-control" ng-model="message.text" /> | |
<button type="button" class="btn btn-success" ng-click="setMessage()">Set Message</button> | |
<button type="button" class="btn btn-warning" ng-click="updateMessage()">Update Message</button> | |
<button type="button" class="btn btn-danger" ng-click="removeMessage()">Remove Message</button> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*global Firebase*/ | |
'use strict'; | |
angular.module('firebaseApp') | |
.controller('MainCtrl', function ($scope, $timeout) { | |
var rootRef = new Firebase('https://glaring-fire-877.firebaseio.com/'); | |
var childRef = rootRef.child('message'); | |
// Read current data from Firebase snapshot | |
// 'on' (string, function) | |
childRef.on('value', function (snapshot){ | |
// timeout used to let Angular know about Firebase | |
// Use Angular timeout service to move Firebase code up in call stack | |
$timeout(function(){ | |
var snapshotVal = snapshot.val(); | |
console.log(snapshotVal); | |
$scope.message = snapshotVal; | |
}); | |
}); | |
// Watch for values to change on message.text | |
$scope.$watch('message.text', function(newVal){ | |
// Make sure 'newVal' is not undefined | |
if(!newVal) return; | |
childRef.update({ | |
text:newVal | |
}); | |
}); | |
// https://glaring-fire-877.firebaseio.com/message | |
$scope.setMessage = function () { | |
childRef.set({ | |
user: 'Bob', | |
text: 'Hi' | |
}); | |
}; | |
$scope.updateMessage = function () { | |
childRef.update({ | |
text: 'Bye' | |
}); | |
}; | |
$scope.removeMessage = function () { | |
childRef.remove(); | |
}; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment