这是一个非常好的方法。通常,只要该功能仅由单个组件使用,您应该更喜欢本地状态而不是全局(插件)状态。因此,如果您让我们说一个元素是唯一负责渲染加载器图像的组件,那么通过 property 将其仅保留在该组件的本地当然是一种好方法isLoading
。
现在,正如您所提到的,您可能需要从应用程序中的各个位置访问该状态,也就是您想要将其提升为全局状态的时候。或者,这就是将加载器封装在自定义元素中的好处,让消费者有条件地显示加载器元素。最重要的是,将加载状态和加载机制存储在您通过 DI 公开的服务中。
// loading-service.ts
export class LoadingService {
showLoader: boolean = false;
public async yourLoadingMechanism() {
this.showLoader = true;
await fetchYourDataAsync();
this.showLoader = false;
}
}
// consumer-view.ts
export class ConsumerView {
constructor(loadingService: LoadingService) {}
}
// consumer-view.html
<template>
<button click.delegate="loadingService.yourLoadingMechanism()>Fetch data</button>
<status-loader show.bind="loadingService.showLoader"></status-loader>
</template>
我个人认为没有 100% 的这个或那个。使用 store 插件并不一定意味着您必须全力以赴进行全局状态管理,而是可以并且应该在您认为合适的地方结合使用经典服务。上述方法不仅封装了加载指示器,还帮助您将数据访问重构到一个地方。如果服务本身需要监听状态变化,您甚至可以在其中创建订阅并执行所需的操作。