Quasar CLI with Webpack - @quasar/app-webpack

Vue SSR 指令

警告

此页文档针对于 Quasar v2.6 及其以上的版本。

由于 Vue3 的架构调整,普通的 Vue 指令需要做一些额外的工作后才能在 SSR 模式中正常运行。

SSR 构建服务端时需要所有的 Vue 指令都额外提供一个getSSRProps()方法。

提示

  • 您不需要担心 Quasar 提供的指令,因为它们都为 SSR 模式做了兼容,可以直接运行在 SSR 模式中。
  • 然而,当您使用第三方库提供的 Vue 指令并且报错时,需要考虑作者是否考虑了 vue3 的 SSR 的兼容性(是否在指令的定义中添加了 getSSRProps()方法)

如何声明一个指令

下面的内容来自Vue.js 文档

因为大多数的自定义指令都包含了对 DOM 的直接操作,所以它们会在 SSR 时被忽略。但如果您想要自己控制一个自定义指令在 SSR 时应该如何被渲染 (即应该在渲染的元素上添加哪些 attribute),您可以使用 getSSRProps 指令钩子:

const myDirective = {
  mounted (el, binding) {
    // 客户端实现:
    // 直接更新 DOM
    el.id = binding.value
  },

  getSSRProps (binding) {
   // 服务端实现:
    // 返回需要渲染的 prop
    // getSSRProps 只接收一个 binding 参数
    return {
      id: binding.value
    }
  }
}