Ho una fabbrica angolare il cui compito è salvare oggetti speciali e recuperarli in seguito.
(utilizzato per salvare il flusso di lavoro degli utenti quando cambia visualizzazione).Come inserire oggetti nell'array all'interno di un prototipo JavaScript?
Fondamentalmente ho bisogno di salvare oggetti con un nome, così come una serie di tag. Il mio problema è con il salvataggio dei tag nella parte dell'array.
Il prototipo costruttore:
// define the TagsObject constructor function
var TagsObject = function(name, tag) {
this.name = name;
this.tags = [].push(tag);
return this;
};
codice di fabbrica completa:
.factory('TagFactory', [function() {
// Init TagFactory:
var tagContainers = [];
// define the TagsObject constructor function
var TagsObject = function(name, tag) {
this.name = name;
this.tags = [].push(tag);
return this;
};
console.log('tagFactory');
console.log(TagsObject);
var saveTags = function(name, tag) {
tagContainers.push(new TagsObject(name, tag));
console.log('saveTags:');
console.log(tagContainers);
};
var getTags = function(name) {
console.log(name);
return this;
};
return {
saveTags : saveTags,
getTags : getTags
};
}]);
In un controller diverso ora salvare alcuni dati in un new Prototype
all'interno della TagFactory:
TagFactory.saveTags('TEST', tagObj);
Ora torna nella mia fabbrica, dove vedi lo console.log(nameTagContainers);
il seguente è il registro:
[TagsObject]
0: TagsObject
tags: 1
name: "TEST"
__proto__: TagsObject
length: 1
__proto__: Array[0]
^tag è una matrice, ma sta mostrando 1, al posto dei dettagli dell'oggetto ... ti vedi dove ho sbagliato?
UPDATE: Questa domanda è stato risposto di seguito dal Kauê Gimenes, però sto condividendo il codice aggiuntivo ho aggiunto per risolvere il mio altro problema.
Che era ogni volta un nuovo tag è stato selezionato per un nome attualmente selezionato, ha generato un nuovo prototipo, invece di salvare il tag in un prototipo esistente:
var saveTags = function(name, tag) {
console.log(tagContainers.length);
if (tagContainers.length != 0) {
for(var i = 0; i < tagContainers.length; i++) {
if (tagContainers[i].name == name) {
console.log('Found existing name! Add tag to existing obj');
tagContainers[i].tags.push(tag);
break;
} else {
console.log('New name, create new obj');
tagContainers.push(new TagsObject(name, tag));
}
}
}
else {
console.log('New name, init: create the first obj');
tagContainers.push(new TagsObject(name, tag));
}
console.log(' ');
console.log('tagContainers:');
console.log(tagContainers);
};
Ah sì che funziona, e fa rispondere a questa domanda ... però ho capito ho scritto questo codice errato. Ci sono diversi tag che l'utente può selezionare per 1 nome. In questo momento il mio codice crea un nuovo prototipo ogni volta che l'utente fa clic su un nuovo tag per un solo nome. Grazie! Devo aggiornare il mio codice ed eventualmente postare una nuova domanda. –
Includo alcune informazioni aggiuntive per rendere la risposta più chiara, se avete ancora domande su questo sentitevi liberi di chiedere! –
ah ok così l'array * n * elements potrebbe risolvere il mio nuovo problema qui –