2017-03-31 5 views
1

Ich habe eine Komponente, die eine andere Komponente mit einer ngIf-Anweisung verwendet. Ich möchte nur die zweite Komponente laden, sobald die ngIf wahr auswertet.gibt es eine Möglichkeit faul eine Komponente in eckigen 2 Dart zu laden?

EDIT: einen Artikel gefunden, der fast tun kann, was ich brauche: https://medium.com/@matanlurey/lazy-loading-with-angular-dart-14f58004f988. Nach dem Laden der Bibliothek wird jedoch die gesamte Ansicht der Komponente benötigt. In meinem Fall muss ich es an einer bestimmten Stelle in der HTML der Elternkomponente einfügen.

Etwas wie:

import '../other/edit_component.dart' deferred as otherEdit; 

@Component(
    selector: 'edit-component', 
    template: '<other-component *ngIf="canOther"></other-component> 
    <button type="button" (click)="go()"></button>', 
    directives: const [ 
     otherEdit.OtherComponent 
    ] 
) 
class EditComponent { 
    @Input() 
    bool canOther = false; 

    go() { 
    otherEdit.loadLibrary(); 
    canOther = true; 
    } 
} 
+0

So wollen Sie eigentlich eine Komponente nicht eine Richtlinie laden. Sie möchten, dass eine Anweisung das verzögerte Laden auslöst. –

+0

richtig, eine Komponente. Einen Fehler gemacht, werde es bearbeiten – Jonathan

Antwort

0

Es hat einfach funktioniert. Benutzt die DynamicComponent als Beispiel aus rkj answer.

// the lib that has the component to be loaded 
import 'package:somecomponent.dart' deferred as mycomponent; 

class mainComponent { 
    // <div #holder></div> element that we will append the component 
    @ViewChild('holder', read: ViewContainerRef) 
    ViewContainerRef holder; 

    // this will load the component dynamically 
    final DynamicComponentLoader _componentLoader; 

    load() { 
    // clear the html 
    holder.clear(); 

    // load the component dynamically 
    ComponentRef componentRef = await _componentLoader 
     .loadNextToLocation(componentType, holder); 

    // set some attributes like you would with [attributes]="somevar" 
    componentRef.instance 
     ..attribute = somevar; 
    } 

    mainComponent(this. _componentLoader){} 
} 
+0

Wo befindet sich die 'DynamicComponent'? Ich kann es nicht finden und importieren. – HoBi

+1

@HoBi ist SlowComponentLoader in Angular 4 und DynamicComponentLoader in Angular 2/3. – Jonathan

2

Ich glaube nicht, dass Sie es direkt tun können. Was Sie stattdessen tun können, ist die Verwendung von DynamicComponent von Angular2_components und übergeben Sie den Typ nach dem langsamen Laden.

Verwandte Themen