Skip to content

Commit c6a9b37

Browse files
clarkdopi0
authored andcommitted
feat(vue-app): support functional watchQuery (nuxt#6222)
1 parent 8f5244c commit c6a9b37

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

packages/vue-app/template/client.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,21 @@ async function loadAsyncComponents(to, from, next) {
140140
<% } %>
141141

142142
try {
143-
const Components = await resolveRouteComponents(to)
143+
const Components = await resolveRouteComponents(
144+
to,
145+
(Component, instance) => ({ Component, instance })
146+
)
144147
<% if (loading) { %>
145148
if (!this._pathChanged && this._queryChanged) {
146149
// Add a marker on each component that it needs to refresh or not
147-
const startLoader = Components.some((Component) => {
150+
const startLoader = Components.some(({Component, instance}) => {
148151
const watchQuery = Component.options.watchQuery
149-
if (watchQuery === true) return true
150-
if (Array.isArray(watchQuery)) {
152+
if (watchQuery === true) {
153+
return true
154+
} else if (Array.isArray(watchQuery)) {
151155
return watchQuery.some(key => this._diffQuery[key])
156+
} else if (typeof watchQuery === 'function') {
157+
return watchQuery.apply(instance, [to.query, from.query])
152158
}
153159
return false
154160
})

packages/vue-app/template/utils.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ export function flatMapComponents(route, fn) {
9898
}))
9999
}
100100

101-
export function resolveRouteComponents(route) {
101+
export function resolveRouteComponents(route, fn) {
102102
return Promise.all(
103-
flatMapComponents(route, async (Component, _, match, key) => {
103+
flatMapComponents(route, async (Component, instance, match, key) => {
104104
// If component is a function, resolve it
105105
if (typeof Component === 'function' && !Component.options) {
106106
Component = await Component()
107107
}
108-
match.components[key] = sanitizeComponent(Component)
109-
return match.components[key]
108+
match.components[key] = Component = sanitizeComponent(Component)
109+
return typeof fn === 'function' ? fn(Component, instance, match, key) : Component
110110
})
111111
)
112112
}

0 commit comments

Comments
 (0)