I've only been playing around with it but I thought I'd add some ideas that are working so far for me:
- Don't use your Firebase URL all over the place in your app.
- DRY it up by creating an AngularJS constant for your main Firebase instance (e.g. "module.constant('baseStore', new Firebase('https://whatever.firebaseio.com'));").
- Every sub reference to the base now uses the "child" method off that baseStore object to get sub-objects (e.g. "var props = baseStore.child('props');").
- Create an auth service that your app uses instead of using the AngularFire auth libs directly. Makes it much easier to control/test your auth flow, especially if you change from "email/password" to, say, "persona".
I still have some questions about the interactions between Angular and Firebase/AngularFire but maybe I'll save them for a StackOverflow question. ( =
It would be nice in the AngularFire documentation if they were clear what was a promise (implicit binding) and what wasn't (explicit binding).
One of the things I ran into (which I hope they add to the documentation): before using implicit binding, create the object on the $scope in your controller first. Only after the empty object is on the scope should you call "angularFire(ref, $scope, 'thing');". The error that shows up if you don't do that is rather cryptic.
Still, a great project and concept, just has some more way to go before I'd use it in a real project. I do want to check out https://github.com/marknutter/firebase-resource though, made by a fellow HNer and mentioned last time around.
I agree with the other commenters that the AngularFire bindings are not mature yet. The documentation is lacking in detail and I couldn't figure out how to make it work with lists in Firebase. So I ended up using the regular Firebase javascript API instead of AngularFire.
You can have a look at the code here: https://github.com/dbbert/personal/tree/gh-pages.
- be sure to set an empty object on your scope before setting up implicit binding on that object. If you don't, the error will be cryptic.
- add the property "authRequired: true" to your routes when setting up your $routeProvider to get AngularFire to block access to that route when not authenticated.
- be careful about using $scope.apply with AngularFire since you're often already in the apply cycle in its callbacks (would be nice if that were explicit).
Also, I'm sure some of you might point out 1.2 is still in an RC state but I needed ngAnimate and didn't want to have to re-write a bunch of code a few weeks from now when it releases it's final version.
"Implicit" is a two-way, automatic binding: updates from the server will show up in your app and updates your app makes will be sent to the server automatically.
"Explicit" is a one-way, manual binding: updates from the server will show up in your app automatically but you have to sync back to the server manually using the add, remove, and update methods.
Is that what you mean?
Working with Firebase has been fun, but security is hard. AngularFire is not really mature yet, too.
I am running into this issue as well, I kind of wish I had written my own firebase service instead of using theirs because (Especially in the 0.2 release) I was seeing the app re-draw a ton of times due to the way that angularFire was loading the data. That and a bunch of little inconsistencies, like when creating an angularFireCollection you can optionally pass in a callback as the second parameter that returns your data, great if you want to assign it all at once instead of each "child_added" being fired but the object it returns is the same as is returned from a ref.once() call (As can be seen in the code for angularFireCollection) and for that not only do you need to call .val() on what is passed in to get the value but it is not an angularFireCollection, it is just Firebase data and so it rather useless as the binding does not work and you can't call the angularFireCollection methods on the returned data (like .add()).
Please don't get me wrong, AngularJS is awesome and Firebase is really cool but there is learning curve and as you said angularFire isn't really mature yet. That said I am very impressed with the work being done on angularFire (and speed) so hopefully it will shape up nicely.