5
我有一个角工厂,他的工作是保存特殊对象并在稍后检索它们。
(用于在切换视图时保存用户工作流程)。如何将对象推入JavaScript Prototype中的数组?
基本上我需要保存具有名称的对象,以及一组标签。我的问题是将标签保存到数组部分。
原型构造:
// define the TagsObject constructor function
var TagsObject = function(name, tag) {
this.name = name;
this.tags = [].push(tag);
return this;
};
全面的工厂代码:
.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
};
}]);
在不同的控制器我现在有些数据保存到new Prototype
的TagFactory内:
TagFactory.saveTags('TEST', tagObj);
现在回到我的工厂,在那里你看到console.log(nameTagContainers);
以下是日志:
[TagsObject]
0: TagsObject
tags: 1
name: "TEST"
__proto__: TagsObject
length: 1
__proto__: Array[0]
^标签是一个数组,但它显示1,而不是对象的细节......你看到我错在哪里?
UPDATE:对此问题予以Kauê Gimenes下面回答,但是我分享我加入到解决我的问题,其他额外的代码。
这是每一个被选定为当前选择的名称的新标签时,它产生一个新的原型,而不是保存标签到现有的原型:
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);
};
啊是啊,做工作,做回答这个问题......不过,我才意识到我写了这个代码错误。有几个标签可供用户选择1个名称。现在我的代码每次用户只需为一个名称点击一个新标签就会创建一个新的Prototype。谢谢!我需要更新我的代码,并可能发布一个新问题。 –
我包含一些额外的信息,使答案更清楚,如果您仍然有任何问题可以随意问! –
啊好,所以* n *元素阵列可以在这里修复我的新问题 –