我昨天才开始工作,所以没有伟大的专家,但我认为它可以满足您的要求。我在网上也找不到很好的例子。
这将触发一个关于您的视图的对话框,其中包含您想要的任何消息。我没有包含对话代码,但它存在于我的 messagesService 中。
请注意,我将 InMemoryCache 留在那里作为诸如不需要它的响应的注释。它包含在 Boost 中并自动设置。我能够用 readQuery 阅读它。
我选择了 Boost,并将它放在导出类的 app.module 中,因为我无法让它在模块提供程序中工作。最初我像你一样设置,但到达 messagesService 没有成功。它也可以是一项服务,我可以将它移到那里。这是全球性的,您无需在组件中执行任何操作。非常好!
app.module.ts
export class AppModule {
// Create and setup the Apollo server with error catching globally.
constructor(
private messagesService: MessagesService,
private apollo: ApolloBoost,
) {
apollo.create({
uri: 'http://localhost:3000/graphql',
// cache: new InMemoryCache(), // This is included by default. Can be modified.
onError: ({ graphQLErrors, networkError }) => {
if (graphQLErrors) {
graphQLErrors.map(({ message, locations, path }) =>
console.log(
`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`),
console.log('This is a graphQL error!'),
);
const msg1 = 'GraphQL error';
const msg2 = 'Please contact support.';
this.handleError(msg1, msg2)
}
if (networkError) {
console.log('This is a Network Error!', networkError);
console.log('Can be called from a query error in the browser code!');
const msg1 = 'Network error';
const msg2 = 'Please check your Internet connection. If OK then contact support .';
this.handleError(msg1, msg2)
}
}
});
}
public handleError(msg1, msg2) {
this.messagesService.openDialog(msg1, msg2);
}
}