2016-10-29 31 views
17

ở góc 2 Tôi cần tạo một mẫu html lớn với các phần thừa. Vì vậy, tôi muốn tạo nhiều mẫu html và đặt chúng lại với nhau bằng cách đưa chúng vào tệp html chính (như ng-include trong angular1)góc 2 bao gồm các mẫu html

Nhưng làm cách nào để bao gồm các mẫu con trong mẫu chính?

dụ:

<!-- test.html --> 

<div> 
    this is my Sub-Item 
    <!-- include sub1.html here--> 
</div> 
<div> 
    this is second Sub-Item 
    <!-- include sub2.html here--> 
</div> 

-

<!-- sub1.html --> 
<div> 
    <button>I'am sub1</button> 
</div> 

-

<!-- sub2.html --> 
<div> 
    <div>I'am sub2</div> 
</div> 
+0

không có bất kỳ ngữ cảnh góc nào trong đó? hoặc chỉ 'div' và' văn bản tĩnh'? – micronyks

+0

chắc chắn là vậy. Tôi có nhiều {{}} và * ngIf, ngFor, ... nhưng làm cách nào để đưa các mẫu khác vào mẫu chính? –

+0

Điều này có hữu ích không? http://stackoverflow.com/questions/12863663/complex-nesting-of-partials-and-templates – natel

Trả lời

11

Bạn có thể tạo các thành phần như sub1 sub2 vv Và trên những thành phần con này thêm các tệp html làm mẫu.

Trên html chính, hãy gọi cho bộ chọn thành phần tương ứng. Nó sẽ hoạt động

+1

cảm ơn bạn. Tôi đoán tôi sẽ làm điều đó như thế ... muốn có được xung quanh việc tạo ra các thành phần cho mỗi mẫu ... nhưng cảm ơn bạn :) –

+0

Okey nếu bạn gặp phải bất kỳ vấn đề ping ở đây. –

+0

bạn có thể thêm một ví dụ mã không? – user2638975

2

Hãy để tôi nói với bạn đầu tiên của tất cả những gì ng-include từ Angular1.x không phải là s được hỗ trợ bởi Angular2 nên rõ ràng là $Compile không có trong Angular2. Vì vậy, bạn có thể tiếp tục với CRF-ComponentFactoryResolver như được hiển thị ở đây để thêm HTML động với bối cảnh góc cạnh.

DEMO - (CFR): https://plnkr.co/edit/YdRlULhWQR3L3akAr2eb?p=preview


Nếu mảnh HTML của bạn có bối cảnh góc cạnh, bạn nên sử dụng CFR-ComponentFactoryResolver.

Như trong sub1.html, bạn có button, bạn có thể muốn nhấp vào nó và bắn sự kiện click của nó. Điều này có thể đạt được với CFR như hình dưới đây,

Bạn có thể làm rất nhiều với CRF. Đây có lẽ là ví dụ dễ nhất.

@Component({ 
    selector: 'my-app', 
    template: ` 

    <button (click)="addComponents()">Add HTML (dynamically using CRF)</button> 

    <h1>Angular2 AppComponent</h1> 
    <hr> 

    <div> 
    <h5>sub1.html goes here</h5> 
     <div class="container"> 
     <template #subContainer1></template> 
     </div> 
    </div> 

    <hr> 
    <h5>sub2.html goes here</h5> 
    <div class="container"> 
     <template #subContainer2></template> 
    </div> 
    `, 

}) 
export class App { 
    name:string; 
    @ViewChild('subContainer1', {read: ViewContainerRef}) subContainer1: ViewContainerRef; 
    @ViewChild('subContainer2', {read: ViewContainerRef}) subContainer2: ViewContainerRef; 
    constructor(
     private compFactoryResolver: ComponentFactoryResolver 
    ) { 
     this.name = 'Angular2' 
    } 

    addComponents() { 

     let compFactory: ComponentFactory; 

     compFactory = this.compFactoryResolver.resolveComponentFactory(Part1Component); 
     this.subContainer1.createComponent(compFactory); 


     compFactory = this.compFactoryResolver.resolveComponentFactory(Part2Component); 
     this.subContainer2.createComponent(compFactory); 
    } 
    } 
} 
+2

'ComponentFactoryResolver' không còn trong API lõi. – Roland

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