开发者工具 (devtools) 可帮助您调试和检查查询 (queries) 与变更 (mutations)。您可以通过在 provideTanStackQuery 中添加 withDevtools 来启用开发者工具。
默认情况下,当 Angular 的 isDevMode 返回 true 时,开发者工具会自动启用。因此您无需担心在生产构建中排除它们。核心工具会按需懒加载,并且不会包含在打包代码中。大多数情况下,您只需在 provideTanStackQuery 中添加 withDevtools() 即可,无需额外配置。
import {
QueryClient,
provideTanStackQuery,
withDevtools,
} from '@tanstack/angular-query-experimental'
export const appConfig: ApplicationConfig = {
providers: [provideTanStackQuery(new QueryClient(), withDevtools())],
}
import {
QueryClient,
provideTanStackQuery,
withDevtools,
} from '@tanstack/angular-query-experimental'
export const appConfig: ApplicationConfig = {
providers: [provideTanStackQuery(new QueryClient(), withDevtools())],
}
如果需要更精细地控制开发者工具的加载时机,可以使用 loadDevtools 选项。这在基于环境配置加载开发者工具时特别有用。例如,您的测试环境可能运行在生产模式下,但仍需要开发者工具可用。
当不设置该选项或设置为 'auto' 时,开发者工具会在 Angular 处于开发模式时加载。
provideTanStackQuery(new QueryClient(), withDevtools())
// 等价于
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({ loadDevtools: 'auto' })),
)
provideTanStackQuery(new QueryClient(), withDevtools())
// 等价于
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({ loadDevtools: 'auto' })),
)
当设置为 true 时,开发者工具会在开发和生产模式下都加载。
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({ loadDevtools: true })),
)
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({ loadDevtools: true })),
)
当设置为 false 时,开发者工具将不会加载。
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({ loadDevtools: false })),
)
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({ loadDevtools: false })),
)
withDevtools 的选项通过回调函数返回,以支持通过信号 (signals) 实现响应式。以下示例中,我们通过监听键盘快捷键的 RxJS 可观察对象创建信号。当事件触发时,开发者工具会按需加载。这种技术允许您支持在生产模式下按需加载开发者工具,而无需将完整工具包含在打包代码中。
@Injectable({ providedIn: 'root' })
class DevtoolsOptionsManager {
loadDevtools = toSignal(
fromEvent<KeyboardEvent>(document, 'keydown').pipe(
map(
(event): boolean =>
event.metaKey && event.ctrlKey && event.shiftKey && event.key === 'D',
),
scan((acc, curr) => acc || curr, false),
),
{
initialValue: false,
},
)
}
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(),
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({
initialIsOpen: true,
loadDevtools: inject(DevtoolsOptionsManager).loadDevtools(),
})),
),
],
}
@Injectable({ providedIn: 'root' })
class DevtoolsOptionsManager {
loadDevtools = toSignal(
fromEvent<KeyboardEvent>(document, 'keydown').pipe(
map(
(event): boolean =>
event.metaKey && event.ctrlKey && event.shiftKey && event.key === 'D',
),
scan((acc, curr) => acc || curr, false),
),
{
initialValue: false,
},
)
}
export const appConfig: ApplicationConfig = {
providers: [
provideHttpClient(),
provideTanStackQuery(
new QueryClient(),
withDevtools(() => ({
initialIsOpen: true,
loadDevtools: inject(DevtoolsOptionsManager).loadDevtools(),
})),
),
],
}
以下选项 client、position、errorTypes、buttonPosition 和 initialIsOpen 支持通过信号实现响应式。