javascript - Aurelia - 如何在路线的子容器中注册单例?
问题描述
我想将单例限定为路由,以便每次用户重新进入路由时都会创建一个新实例。我以为我可以在路由视图模型中的(自动创建的)子容器上注册一个实例,但出现错误:
错误 [app-router] ReferenceError:在初始化之前无法访问“SomeOtherClass”
如何在路由的容器中注册单例,使其仅适用于该路由?
我的路由虚拟机看起来像
import {autoinject, Container} from 'aurelia-framework';
import {SomeOtherClass} from '...some-other-class'; // The actual relative path
@autoinject
export class SomeRoute {
constructor(private container: Container) {
container.registerInstance(SomeOtherClass);
}
}
我要注册的类会自动注入到路由中的各个组件中。那堂课看起来像
import {autoinject} from 'aurelia-framework';
@autoinject
export class SomeOtherClass {
constructor(private dep1: Dep1, private dep2: Dep2) {
// Stuff that I want to re-run every time the user (re)enters the route
}
}
和其他类只是像这样注入它
import {autoinject} from 'aurelia-framework';
import {SomeOtherClass} from '...some-other-class'; // The actual relative path
@autoinject
export class SomeComponent {
constructor(someOtherClass: SomeOtherClass) {
// Use the singleton instance within this route
}
}
解决方案
呸,我发现问题了!错误消息对我来说有点误导。
问题是Foo
导入了一个视图模型类(因为我在它上面贴了一个公共静态常量)。路由器尚未初始化该视图模型类。我将常量移到另一个类(无论如何都不属于那里)并且错误消失了。
我还确认Foo
's 单例现在被限定为路由的子容器。
推荐阅读
- sentiment-analysis - 情绪分析中的人工智能偏见
- r - R:用carrier::crate包装部分环境以预测新数据
- nginx - Nginx php-fpm“找不到文件”和可疑符号
- javascript - 如何指示 ESLint 忽略项目中的规则集?
- python - 尝试从字符串中删除 2 个子字符串
- json - 从 CLOB 数据类型列生成 Oracle JSON
- docker-compose - Docker:从“桥接网络容器”到主机网络容器的通信
- angular - Angular Service Worker 未正确缓存 dataGroups URL
- r - 使用 left_join() 连接两个数据帧
- java - Java 多线程锁无法正常工作