我正在学习 Vue.js,并尝试了keep-alive
允许component
在组件之间动态切换的机制。据我了解,我可以做这样的事情:
<template>
<section>
<button @click="setSelectedTab('section-a')">Section A</button>
<button @click="setSelectedTab('section-b')">Section B</button>
</section>
<keep-alive>
<component :is="selectedTab"></component>
</keep-alive>
</template>
export default defineComponent({
name: "SomeComponent",
components: {
SectionA,
SectionB,
},
data() {
return {
selectedTab: 'section-a',
};
},
methods: {
setSelectedTab(tab: string): void {
this.selectedTab = tab;
},
},
});
</script>
上面的代码将根据单击的按钮显示组件,同时确保未显示的组件保持活动状态,保持其内部状态SectionA
。SectionB
在 Angular 中,我必须执行以下操作:
import { Component } from '@angular/core';
@Component({
selector: 'app-some',
template: `
<section>
<button (click)="setSelectedTab('section-a')">Section A</button>
<button (click)="setSelectedTab('section-b')">Section B</button>
</section>
<app-section-a *ngIf="selectedTab === 'section-a'"></app-section-a>
<app-section-b *ngIf="selectedTab === 'section-b'"></app-section-b>
`,
styleUrls: ['./resources.component.scss']
})
export class SomeComponent {
selectedTab = 'section-a';
setSelectedTab(tab: string): void {
this.selectedTab = tab;
}
}
我想如果我想保持组件的内部状态,我应该使用以下内容:
<app-section-a [ngStyle]="{ display: selectedTab !== 'section-a' ? 'none' : 'block' }"></app-section-a>
<app-section-b [ngStyle]="{ display: selectedTab !== 'section-b' ? 'none' : 'block' }"></app-section-b>
有没有更好的方法在 Angular 中实现 Vue.js 行为?