2016-10-03 6 views
0

ist es möglich, den Namen eines Objekts mit einer String-Variablen zu setzen?angularfire2 den Titel eines Objekts durch dynamischen Dateninhalt setzen

Zum Beispiel:

car: { 
    brands: { 
    var1: {}, 
/*where var1 is a model and want to add some more models in different spaces in time.*/ 
    } 
} 

Dies ist die Abfrage, die ich arbeiten würde vorgestellt:

addBrand (var1) { 
    var brandRef = firebase.database() .ref().child ('car/brands'); 
    brandRef.set ({ 
     var1: {} 
    }); 
} 

Der Ausgang ich erhalte, ist der Text var1, nicht ihren Wert.

Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

0

aktualisiert Antwort

Sie können dies tun:

addBrandInfo (brandName, brandInfo) { 
    let brandRef = firebase.database().ref(`car/brands/${brandName}`); 
    brandRef.set(brandInfo); 
} 

updateBrandInfo (brandName, brandInfo) { 
    let brandRef = firebase.database().ref(`car/brands/${brandName}`); 
    brandRef.update(brandInfo); 
} 

Im folgenden Abschnitt wird versucht, mit gutem Beispiel zu zeigen, wie jeder Anruf Feuerbasis beeinflusst:

// Let's assume your firebase is empty. 

addBrandInfo('tesla', { established: 2003, founder: 'Elon Musk' }); 
// car: { 
// brands: { 
//  tesla: { established: 2003, founder: 'Elon Musk' } 
// } 
// } 

addBrandInfo('ford', { established: 1905, founder: 'Henry Ford' }); 
// car: { 
// brands: { 
//  ford: { established: 1905, founder: 'Henry Ford' }, 
//  tesla: { established: 2003, founder: 'Elon Musk' } 
// } 
// } 

updateBrandInfo('ford', { established: 1903 }); 
// car: { 
// brands: { 
//  ford: { established: 1903, founder: 'Henry Ford' }, 
//  tesla: { established: 2003, founder: 'Elon Musk' } 
// } 
// } 

Beachten Sie, wie der letzte Aufruf updateBrandInfo() aktualisiert nur ford's etabliertes Jahr, aber es verlässt den Gründer Henry Ford allein.

VORSICHT Das Apostroph aussehendes Ding um car/brands/${brandName} ist ein Rück tick und NICHT ein Apostroph.

+0

Sie können mit '.update (setinfo)' zu Ihrer bestehenden Daten hinzuzufügen. – Caleb

+0

Ich denke 'setInfo = {};' löscht den vorherigen Inhalt, was es unmöglich macht, mehr als eine Marke zu speichern. – RaulGM

+0

Wenn Sie diese Anrufe ausgeführt haben, werden sie zu Ihren Automarken hinzugefügt und * löscht * nicht die vorherigen. 'brandRef.update ({volvo: true});', 'brandRef.update ({tesla: true});' Wenn Sie 'brandRef.set ({});' danach ausführen, wird 'auto/brands' gesetzt zu {}, wodurch das Objekt bei dieser Referenz im Wesentlichen entfernt wird. Hoffe, das klärt es ein bisschen mehr auf. – Caleb

1

Was ich getan habe ist:

let brandRef = firebase.database() .ref().child ('car/brands'); 
brandRef.child (var1).set ({ 
    whatever: '' 
}); 

funktioniert perfekt!

+0

Wenn Sie nur eine primitive Zeichenkette haben wollen, werden Sie dies stattdessen wollen: 'brandRef.chid (var1).set ('whatever string'); 'In dem obigen Beispiel wird ein anderes Objekt unter' car/brands/ 'anstatt nur einer leeren Zeichenfolge hinzugefügt. – Caleb

0

Mit Angularfire2 versuchen ein Verfahren wie unten:

addbrand (var1, value) { 
    const toSend = this.af.database.object(`/car/brands/${var1}`); 
    toSend.set(value); 
} 
Verwandte Themen