Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将对象推送到JavaScript原型内部的数组中?_Javascript_Angularjs_Prototype_Angularjs Service_Angularjs Factory - Fatal编程技术网

如何将对象推送到JavaScript原型内部的数组中?

如何将对象推送到JavaScript原型内部的数组中?,javascript,angularjs,prototype,angularjs-service,angularjs-factory,Javascript,Angularjs,Prototype,Angularjs Service,Angularjs Factory,我有一个Angular Factory,其工作是保存特殊对象并在以后检索它们。(用于在用户切换视图时保存用户工作流) 基本上,我需要用一个名称和一组标记来保存对象。我的问题是将标记保存到数组部分 原型建造师: // define the TagsObject constructor function var TagsObject = function(name, tag) { this.name = name; this.tags = [].push(tag); retu

我有一个Angular Factory,其工作是保存特殊对象并在以后检索它们。
(用于在用户切换视图时保存用户工作流)

基本上,我需要用一个名称和一组标记来保存对象。我的问题是将标记保存到数组部分

原型建造师:

// 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
    };
}]);
在另一个控制器中,我现在将一些数据保存到TagFactory内部的新原型中:

TagFactory.saveTags('TEST', tagObj);
现在回到我的工厂,在那里可以看到
console.log(nameTagContainers)以下是日志:

[TagsObject]
    0: TagsObject
    tags: 1
    name: "TEST"
    __proto__: TagsObject
    length: 1
    __proto__: Array[0]
^标记是一个数组,但它显示的是1,而不是对象的详细信息。。。你知道我哪里出错了吗



更新:下面回答了这个问题,不过我正在分享我为解决其他问题而添加的额外代码

也就是说,每次为当前选定的名称选择新标记时,它都会生成一个新原型,而不是将标记保存到现有原型中:

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);
};
var saveTags=函数(名称、标记){
console.log(tagContainers.length);
如果(tagContainers.length!=0){
对于(var i=0;i
尝试以下方法:

// define the TagsObject constructor function
var TagsObject = function(name, tag) {
    this.name = name;
    this.tags = [tag];
    return this;
};
初始化数组的最佳方法是将元素包含在括号内

[ 1 , 2 , 3 ]
但是,如果要使用n元素初始化,可以使用
concat
函数

[ 1 ].concat([ 2 , 3 , 4 ])
结果将是:

[ 1 , 2 , 3 , 4 ]

啊,是的,这确实有效,并且回答了这个问题。。。然而,我刚刚意识到我写错了这段代码。用户可以为一个名称选择几个标记。现在,每当用户仅为一个名称单击一个新标记时,我的代码就会创建一个新原型。谢谢我需要更新我的代码,并可能发布一个新问题。我包括一些额外的信息,以使答案更清楚,如果你对此还有任何问题,请随时提问!啊,好吧,这样n元素数组就可以解决我的新问题了,太好了!我很高兴我能解决你的问题=)