5

Tôi có một Nhà máy Góc có công việc là để lưu các đối tượng đặc biệt và truy xuất chúng sau này.
(Được sử dụng để lưu quy trình làm việc của người dùng khi anh chuyển chế độ xem).Làm thế nào để đẩy các đối tượng vào mảng bên trong của một Prototype JavaScript?

Về cơ bản tôi cần phải lưu các đối tượng có tên, cũng như một mảng thẻ. Vấn đề của tôi là với việc lưu các thẻ vào phần mảng.

Prototype constructor:

// define the TagsObject constructor function 
var TagsObject = function(name, tag) { 
    this.name = name; 
    this.tags = [].push(tag); 
    return this; 
}; 

Full Code Factory:

.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 
    }; 
}]); 

Trong một bộ điều khiển khác nhau bây giờ tôi tiết kiệm một số dữ liệu vào một new Prototype bên trong TagFactory:

TagFactory.saveTags('TEST', tagObj); 

Bây giờ trở lại Nhà máy của tôi, nơi bạn nhìn thấy console.log(nameTagContainers); sau đây là nhật ký:

[TagsObject] 
    0: TagsObject 
    tags: 1 
    name: "TEST" 
    __proto__: TagsObject 
    length: 1 
    __proto__: Array[0] 

^Thẻ là một mảng, nhưng hiển thị 1, thay vì chi tiết đối tượng ... bạn có thấy tôi đã đi sai không?



UPDATE: Câu hỏi này được trả lời dưới đây bởi Kauê Gimenes, tuy nhiên tôi đang chia sẻ mã thêm tôi thêm vào khắc phục vấn đề khác của tôi.

nào là mỗi khi một thẻ mới được lựa chọn cho một tên đang được chọn, nó tạo ra một thử nghiệm mới, thay vì tiết kiệm thẻ vào một thử nghiệm hiện có:

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); 
}; 

Trả lời

2

Hãy thử phương pháp này:

// define the TagsObject constructor function 
var TagsObject = function(name, tag) { 
    this.name = name; 
    this.tags = [tag]; 
    return this; 
}; 

cách tốt nhất để khởi một mảng được để bao gồm các yếu tố bên trong dấu ngoặc

[ 1 , 2 , 3 ] 

Nhưng trong trường hợp bạn muốn khởi tạo với các thành phần n bạn có thể sử dụng hàm concat.

[ 1 ].concat([ 2 , 3 , 4 ]) 

Kết quả sẽ là:

[ 1 , 2 , 3 , 4 ] 
+0

Ah yeah đó không làm việc, và không trả lời câu hỏi này ... tuy nhiên tôi chỉ nhận ra tôi đã viết mã này sai. Có một số thẻ mà người dùng có thể chọn cho 1 tên. Ngay bây giờ mã của tôi tạo một Mẫu thử nghiệm mới mỗi khi người dùng nhấp vào một thẻ mới chỉ với 1 tên. Cảm ơn! Tôi cần cập nhật mã của mình và có thể đăng câu hỏi mới. –

+1

Tôi bao gồm một số thông tin bổ sung để làm cho câu trả lời rõ ràng hơn, nếu bạn vẫn có bất kỳ câu hỏi nào về điều này, vui lòng hỏi! –

+0

ah ok để các thành phần * n * Mảng có thể sửa lỗi mới của tôi ở đây –

Các vấn đề liên quan