diff --git a/src/core/fetch/index.js b/src/core/fetch/index.js index 78481b59c..858395f00 100644 --- a/src/core/fetch/index.js +++ b/src/core/fetch/index.js @@ -1,29 +1,31 @@ import { get } from './ajax' import { callHook } from '../init/lifecycle' -import { getParentPath } from '../router/util' +import { getParentPath, stringifyQuery } from '../router/util' import { noop } from '../util/core' import { getAndActive } from '../event/sidebar' -function loadNested (path, file, next, vm, first) { +function loadNested (path, qs, file, next, vm, first) { path = first ? path : path.replace(/\/$/, '') path = getParentPath(path) if (!path) return - get(vm.router.getFile(path + file)) - .then(next, _ => loadNested(path, file, next, vm)) + get(vm.router.getFile(path + file) + qs).then(next, _ => + loadNested(path, qs, file, next, vm) + ) } export function fetchMixin (proto) { let last proto._fetch = function (cb = noop) { - const { path } = this.route + const { path, query } = this.route + const qs = stringifyQuery(query, ['id']) const { loadNavbar, loadSidebar } = this.config // Abort last request last && last.abort && last.abort() - last = get(this.router.getFile(path), true) + last = get(this.router.getFile(path) + qs, true) // Current page is html this.isHTML = /\.html$/g.test(path) @@ -31,29 +33,42 @@ export function fetchMixin (proto) { const loadSideAndNav = () => { if (!loadSidebar) return cb() - const fn = result => { this._renderSidebar(result); cb() } + const fn = result => { + this._renderSidebar(result) + cb() + } // Load sidebar - loadNested(path, loadSidebar, fn, this, true) + loadNested(path, qs, loadSidebar, fn, this, true) } // Load main content - last.then((text, opt) => { - this._renderMain(text, opt) - loadSideAndNav() - }, - _ => { - this._renderMain(null) - loadSideAndNav() - }) + last.then( + (text, opt) => { + this._renderMain(text, opt) + loadSideAndNav() + }, + _ => { + this._renderMain(null) + loadSideAndNav() + } + ) // Load nav loadNavbar && - loadNested(path, loadNavbar, text => this._renderNav(text), this, true) + loadNested( + path, + qs, + loadNavbar, + text => this._renderNav(text), + this, + true + ) } proto._fetchCover = function () { const { coverpage } = this.config + const query = this.route.query const root = getParentPath(this.route.path) const path = this.router.getFile(root + coverpage) @@ -63,8 +78,9 @@ export function fetchMixin (proto) { } this.coverIsHTML = /\.html$/g.test(path) - get(path) - .then(text => this._renderCover(text)) + get(path + stringifyQuery(query, ['id'])).then(text => + this._renderCover(text) + ) } proto.$fetch = function (cb = noop) { diff --git a/src/core/router/util.js b/src/core/router/util.js index 141ebe2aa..d3ce9a83c 100644 --- a/src/core/router/util.js +++ b/src/core/router/util.js @@ -22,10 +22,11 @@ export function parseQuery (query) { return res } -export function stringifyQuery (obj) { +export function stringifyQuery (obj, ignores = []) { const qs = [] for (const key in obj) { + if (ignores.indexOf(key) > -1) continue qs.push( obj[key] ? `${encode(key)}=${encode(obj[key])}`.toLowerCase()