2015-12-04 26 views
11

Tôi cần có thể thêm & loại bỏ các thành phần góc 2 trên bay. Để làm như vậy, tôi đang sử dụng và định đoạt loadIntoLocation phương pháp, giống như nó:Góc 2 - Thêm/loại bỏ các thành phần trên bay

Thêm một thành phần (từ một người quản lý bố trí):

this.m_loader.loadIntoLocation(MyComponent, this.m_element, 'content').then(_componentRef => { 

    // Create the window and set its title: 
    var component: MyComponent = (_componentRef.instance); 
    component.ref = _componentRef; 

    // init the component content 
}); 

Loại bỏ một phần (từ thành phần):

this.ref.dispose(); 

Nó gần như đang hoạt động: - nếu tôi thêm một thành phần và đóng nó, nó hoạt động - nếu tôi thêm một số thành phần, chúng hoạt động - nhưng nếu tôi thêm thành phần A, sau đó loại bỏ nó, sau đó thêm thành phần B, nó có vẻ như góc cung cấp cho tôi tham chiếu đến A và giữ một số giá trị cũ (thành phần của tôi có thể kéo được và trong trường hợp này, B sẽ được tạo A khi tôi đã hủy nó)

Có cách nào ít nhất là buộc nó tạo ra những cái mới?

+2

Bạn có thể sao chép hành vi trong một plnkr không? Tôi có [cái này hoạt động] (http://plnkr.co/edit/z9xu3x2jVAEaoJq6TbRB?p=preview), nhưng tôi không thể (và tôi không biết thực sự) làm thế nào để tái tạo vấn đề của bạn –

+1

Vâng, tôi đã chia hai người plunker của bạn: http://plnkr.co/edit/lvQfnLfTImcRqRcxJaXU?p=preview. Nhấp vào "Thêm thành phần mới", kéo nó vào một nơi nào đó, nhấp vào "Xóa", sau đó nhấp vào "Thêm thành phần mới" một lần nữa: thành phần được tạo ở vị trí vừa bị xóa. –

+0

Vấn đề dường như là angular2 theo mặc định sử dụng lại các phần tử DOM đã tạo (lấy từ [bình luận này] (https://github.com/angular/angular/issues/4795#issuecomment-151688714)). Vì vậy, nếu trong bootstrap của bạn, bạn đặt 'cung cấp (APP_VIEW_POOL_CAPACITY, {useValue: 0}' nó sẽ hoạt động độc đáo. Đây là [plnkr updated] (http://plnkr.co/edit/bqo9K5bru4CN1jZ4r9mt?p=preview) –

Trả lời

8

Theo đề nghị của Tim,

phần tử DOM comment

góc reuses tạo trước đó trích dẫn @ tbosch bằng cách mặc định

Vì vậy, để tránh những hành vi này, lấy từ những nhận xét là tốt, bạn có thể sử dụng APP_VIEW_POOL_CAPACITY và chỉ định nó 0 làm giá trị.

bootstrap(MyApp, [provide(APP_VIEW_POOL_CAPACITY, {useValue: 0})]) 

Cập nhật

Lưu ý rằng kể từ khi beta.1 APP_VIEW_POOL_CAPACITY đã được gỡ bỏ bởi #5993 và DOM đã được tái tạo một cách chính xác.

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