有没有办法在 angular 2 dart 中延迟加载组件?
is there a way lazy load a component in angular 2 dart?
我有一个组件使用另一个带有 ngIf 语句的组件。我只想在 ngIf 评估为真后加载第二个组件。
编辑:找到一篇几乎可以满足我需要的文章:
https://medium.com/@matanlurey/lazy-loading-with-angular-dart-14f58004f988。但是,加载库后,它会获取组件的整个视图。在我的例子中,我需要将它插入到父组件的 html 中的特定位置。
类似于:
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;
}
}
我认为你不能直接这样做。您可以做的是使用 Angular2_components 中的 DynamicComponent 并在延迟加载后传递类型。
刚刚成功。使用 rkj answer 中的 DynamicComponent 作为示例。
// 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){}
}
我有一个组件使用另一个带有 ngIf 语句的组件。我只想在 ngIf 评估为真后加载第二个组件。
编辑:找到一篇几乎可以满足我需要的文章: https://medium.com/@matanlurey/lazy-loading-with-angular-dart-14f58004f988。但是,加载库后,它会获取组件的整个视图。在我的例子中,我需要将它插入到父组件的 html 中的特定位置。
类似于:
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;
}
}
我认为你不能直接这样做。您可以做的是使用 Angular2_components 中的 DynamicComponent 并在延迟加载后传递类型。
刚刚成功。使用 rkj answer 中的 DynamicComponent 作为示例。
// 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){}
}