I'm starting to wonder if I am structuring my Firebase wrong and causing to
much of a headache for myself.

I was doing a typical MySQL relational setup between a user/profile.

user {
    uid: 100,
    profileId: 1
}

profile {
   uid: 1,
   userId: 100
}

So that's why I was using $loaded() at all, I realize it's a 'bad practice'
but don't know a way around it.

Anyway, setting it up like so makes me worry about Orphans in the future,
and data not being present for IDs that are (reverse orphans? lol)

---

I'll give that a shot, I was coding like that because of:

https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-firebaseobject-loaded

As a shortcut, the resolve() / reject() methods can optionally be passed
directly into $loaded():
var obj = $firebaseObject(ref);
obj.$loaded(
function(data) {
console.log(data === obj); // true
},
function(error) {
console.error("Error:", error);
}
);
On Tuesday, October 6, 2015 at 12:20:17 PM UTC-6, Vincent Bergeron wrote:

Hi!



function activate() {

vm.user = Users.get(auth.uid);

vm.user.$loaded(function() {

vm.profile = Profiles.get(vm.user.profileId);

});

}





should be



function activate() {

vm.user = Users.get(auth.uid);

vm.user*.$loaded().then*(function() {

vm.profile = Profiles.get(vm.user.profileId);

});

}



Try this…



*From:* firebase...@googlegroups.com <javascript:> [mailto:
firebase...@googlegroups.com <javascript:>] *On Behalf Of *Justin
Martiniak
*Sent:* 6 octobre 2015 14:08
*To:* Firebase + AngularJS
*Subject:* Re: [Firebase + Angular] (Angular) Ionic & Firebase + Best
Practice accessing data which might not exist?



//

// Service (Factory) for Profiles

//



(function() {

'use strict';



angular

.module('appx')

.factory('Profiles', Profiles);



Profiles.$inject = ['$firebaseObject', '$firebaseArray', 'FirebaseUrl'];



/* @ngInject */

function Profiles($firebaseObject, $firebaseArray, FirebaseUrl) {

var profilesRef = new Firebase(FirebaseUrl + 'profiles');

var profiles = $firebaseArray(profilesRef);



var service = {

all: profiles,

get: get

};

return service;



////////////////



/**

* I've tried a variety of things here, all unsuccesfully typically:

* 1) No error checking

* 2) Try/Catch

* 3) Try/Catch with if(null) checks

* 4) Try/Catch with if(null) and return {} or null even...

*/

function get(profileId) {

try {

console.log("Getting profile with id: " + profileId);

var profileRef = profilesRef.child(profileId);

return $firebaseObject(profileRef);

} catch(error) {

console.log("Error: " + error);

}

}

}

})();







//

// Controller

//

(function() {

'use strict';



angular

.module('appx')

.controller('ProfileCtrl', UserProfileCtrl);



UserProfileCtrl.$inject = ['auth', 'Users', 'Profiles'];



/* @ngInject */

function UserProfileCtrl(auth, Users, Profiles) {

var vm = this;

vm.settings = {

enableFriends: true

};

activate();



////////////////



/**

* I've tried a variety of thigns here, all unsuccesfully typically:

* 1) Simple set on $scope for user/profile.

* 2) Resolve on routes to provide user/profile.

* 3) Resolve on routes to provide user/profile or {} (which makes
ends up yielding bad data in Firebase)

* 4) Async load in Ctrl watching for $loaded.

* 5) Async load in Ctrl watching for $loaded as well as testing for
null on user/profile.

*/

function activate() {

vm.user = Users.get(auth.uid);

vm.user.$loaded(function() {

vm.profile = Profiles.get(vm.user.profileId);

});

}

}

})();



//

// Resolve on routes...

//

// I've returned just the .get()

// I've returned the .loaded()

// I've returned the .loaded OR {}

user: ['Auth', 'Users', function(Auth, Users) {

var user = Users.get(Auth.$getAuth().uid);

return user.$loaded();

}],

profile: ['Profiles', 'user', function(Profiles, user) {

var profile = Profiles.get(user.profileId);

return profile.$loaded();

}]



//

// View bindings example (nothing special, likely uneccesary)

//

<label class="item item-input">

<span class="input-label">Display Name</span>

<input type="text" ng-model="profile.userinfo.displayName">

</label>

<label class="item item-input">

<span class="input-label">First Name</span>

<input type="text" ng-model="profile.userinfo.firstName">

</label>





So it's all very simple...



The issue I have is when I attempt to get(ID) and the return is null.
None of my code handles this and shit crashes and burns in every attempt I
make.



My goal is to just have the app work gracefully, but I don't know how to
achieve this.



And when the data comes back as null things like the view wont render
properly, buttons / events wont function, etc.


On Tuesday, October 6, 2015 at 11:50:34 AM UTC-6, Vincent Bergeron wrote:

Can you post a sample code of what you're doing?





*From:* firebase...@googlegroups.com
*On Behalf Of *Justin Martiniak
*Sent:* 6 octobre 2015 13:04
*To:* Firebase + AngularJS
*Subject:* [Firebase + Angular] (Angular) Ionic & Firebase + Best
Practice accessing data which might not exist?



(Sorry if I double posted, ain't ever use google groups)



I've chosen to use Firebase as a simple means to handle authentication and
store my over-the-air data... but I'm running into an issue (occasionally).



I'm using angularFire, so whenever I access data I have the ability to get
a $firebaseObject, $firebaseArray or null.



The null part is what catches me off guard... None of the tutorials or
demos I see go through how to handle the null aspect of the request... they
just go ahead and bind the data to $scope or check if it's $loaded() all
things which wont work with null; and then this cascades into other issues
surfacing and potentially just white/empty views.



So how, or what, is the best way to access data from Firebase that might
not be there?

--
You received this message because you are subscribed to the Google Groups
"Firebase + AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to firebase-angul...@googlegroups.com.
To post to this group, send email to firebase...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/firebase-angular/ff11f31a-fb75-4599-b818-04930c65d2da%40googlegroups.com
<https://groups.google.com/d/msgid/firebase-angular/ff11f31a-fb75-4599-b818-04930c65d2da%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups
"Firebase + AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to firebase-angul...@googlegroups.com <javascript:>.
To post to this group, send email to firebase...@googlegroups.com
<javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/firebase-angular/4dc5d0c0-04aa-491f-a5f7-0a502f9d4876%40googlegroups.com
<https://groups.google.com/d/msgid/firebase-angular/4dc5d0c0-04aa-491f-a5f7-0a502f9d4876%40googlegroups.com?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Firebase + AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email to firebase-angular+unsubscribe@googlegroups.com.
To post to this group, send email to firebase-angular@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/firebase-angular/c01da55b-d2fd-4259-8b61-80172a871247%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 5 of 9 | next ›
Discussion Overview
groupfirebase-angular @
postedOct 6, '15 at 5:43p
activeOct 6, '15 at 9:33p
posts9
users3

People

Translate

site design / logo © 2021 Grokbase