Angular - 如何与组件的解析器共享组件中提供的服务?
Angular - How to share a service provided in component with the component's resolver?
我有一个 Messenger 组件,组件本身提供消息服务(因为它需要特定于组件):
@Component({
selector: "app-messenger",
templateUrl: "./messenger.page.html",
styleUrls: ["./messenger.page.scss"],
providers: [MessagesService],
})
在转换到 Messenger 组件之前,我需要加载我的消息(在消息服务中完成),因此我使用解析器 (messagesResolver
)。 messagesService
包含消息,因此解析器需要访问与 messengerComponent
.
相同的 messagesService
实例
我该怎么做?
我目前收到来自解析器的错误:
NullInjectorError: R3InjectorError(MainPageModule)[MessagesResolver -> MessagesResolver -> MessagesService -> MessagesService -> MessagesService]:
NullInjectorError: No provider for MessagesService!
我从其他 Stack Overflow 问题中了解到我可以 Angular 的 Injector?但是我不知道该怎么办。
解析器注意事项:
- 它是在 root 中使用
@Injectable({ providedIn: "root", })
提供的
- 它用于包含 messenger 组件的模块的路由:
{
path: "messenger/:chatID",
loadChildren: () =>
import("./chats/messenger/messenger.module").then((m) => m.MessengerPageModule),
resolve: {
messages: MessagesResolver,
},
},
使用 factory 将允许您访问 services
、components
、properties
、functions
等一个特定的服务被创建。这允许您在创建服务后稍微修改创建过程,例如将值分配给 属性.
@Component({
providers: [{
provide: MessagesService,
useFactory: (messageResolver: MessageResolver) => messageResolver.msgService,
deps: [MessageResolver]
}]
})
export class MessengerComponent {
}
我有一个 Messenger 组件,组件本身提供消息服务(因为它需要特定于组件):
@Component({
selector: "app-messenger",
templateUrl: "./messenger.page.html",
styleUrls: ["./messenger.page.scss"],
providers: [MessagesService],
})
在转换到 Messenger 组件之前,我需要加载我的消息(在消息服务中完成),因此我使用解析器 (messagesResolver
)。 messagesService
包含消息,因此解析器需要访问与 messengerComponent
.
messagesService
实例
我该怎么做?
我目前收到来自解析器的错误:
NullInjectorError: R3InjectorError(MainPageModule)[MessagesResolver -> MessagesResolver -> MessagesService -> MessagesService -> MessagesService]:
NullInjectorError: No provider for MessagesService!
我从其他 Stack Overflow 问题中了解到我可以 Angular 的 Injector?但是我不知道该怎么办。
解析器注意事项:
- 它是在 root 中使用
@Injectable({ providedIn: "root", })
提供的
- 它用于包含 messenger 组件的模块的路由:
{
path: "messenger/:chatID",
loadChildren: () =>
import("./chats/messenger/messenger.module").then((m) => m.MessengerPageModule),
resolve: {
messages: MessagesResolver,
},
},
使用 factory 将允许您访问 services
、components
、properties
、functions
等一个特定的服务被创建。这允许您在创建服务后稍微修改创建过程,例如将值分配给 属性.
@Component({
providers: [{
provide: MessagesService,
useFactory: (messageResolver: MessageResolver) => messageResolver.msgService,
deps: [MessageResolver]
}]
})
export class MessengerComponent {
}