Angular组件的初始化顺序不符合预期顺序的原因是什么?
创始人
2024-11-01 13:30:33
0

Angular组件的初始化顺序与HTML元素的顺序不一定一致。当使用*ngIf指令是,在满足条件时,组件可能不会立即初始化。这意味着,如果一个组件在另一个组件之前应该被初始化,但是与其相关的结构在HTML模板中定义在后面,那么它将在后面被初始化。

以下是一个示例代码:

@Component({
  selector: 'app-parent',
  template: `
    
`, styleUrls: ['./parent.component.css'] }) export class ParentComponent implements OnInit { showChild = true; constructor() { } ngOnInit(): void { } }

在这个例子中,我们有一个ParentComponent和ChildComponent。ParentComponent中有两个ChildComponent实例:一个在*ngIf中,一个没有。如果showChild为true,ngIf中的ChildComponent将被初始化,不管它在HTML模板中的位置如何。如果showChild为false,ChildComponent仍将在HTML模板中的后面被初始化。为了使ChildComponent在父组件中ngIf中的组件之前初始化,我们可以使用静态子代装饰器。

@ViewChildren(ChildComponent) childComponents: QueryList;

在ParentComponent类中添加这行代码,并在ngAfterViewInit中进行重新排序。ngAfterViewInit在所有静态子视图都被初始化后调用。

ngAfterViewInit() {
  this.childComponents.changes.subscribe(change => {
    this.childComponents.toArray().sort((a, b) => {
      return a.id - b.id;
    });
  });
}

现在,ChildComponent将按照id的顺序进行排序,而不管它在HTML模板中的位置如何。

相关内容

热门资讯

透视分享"aapok... 透视分享"aapoker怎么拿好牌"总是有辅助神器(哔哩哔哩)1、每一步都需要思考,不同水平的挑战a...
透视有挂"hhpok... 透视有挂"hhpoker德州牛仔视频"都是真的是有辅助软件(哔哩哔哩)1、实时hhpoker德州牛仔...
透视关于"线上德州的... 透视关于"线上德州的辅助器是什么"原来有辅助插件(哔哩哔哩)1、每一步都需要思考,不同水平的挑战线上...
透视推荐"德扑之心免... 透视推荐"德扑之心免费透视"其实是真的辅助技巧(哔哩哔哩)德扑之心免费透视辅助器是一种具有地方特色的...
透视详情"wepok... 透视详情"wepoker辅助真的假的"好像真的有辅助插件(哔哩哔哩)1、wepoker辅助真的假的破...
透视解谜"wepok... 透视解谜"wepoker好友局透视"好像真的有辅助挂(哔哩哔哩)运wepoker好友局透视辅助工具,...
透视推荐"wepok... 透视推荐"wepoker透视方法"切实有辅助工具(哔哩哔哩)1、玩家可以在wepoker透视方法线上...
透视解谜"wepok... 透视解谜"wepoker透视有用吗"一直真的是有辅助工具(哔哩哔哩)1、下载好wepoker透视有用...
透视专业"wpk辅助... 透视专业"wpk辅助器"都是存在有辅助攻略(哔哩哔哩)1)wpk辅助器辅助插件:进一步探索wpk辅助...
透视科普"wepok... 透视科普"wepoker轻量版辅助"果然存在有辅助插件(哔哩哔哩)1、进入到wepoker轻量版辅助...