繁体   English   中英

vue + nuxt.js - 如何根据域拥有不同的样式?

[英]vue + nuxt.js - How to have different styles based on domain?

我有一个带有单个 vue + nuxt 应用程序的多域站点,它需要为每个站点设置不同的样式。 任何想法或建议如何为域加载不同的样式?

我的第一种方法是在插件 js 中使用“全局”函数,但结果证明它太慢了,分别是评估太晚了。 这意味着页面几乎完成加载,直到类被评估。 这会导致元素首先错误地显示其大小或颜色,然后正确显示的副作用。 这对于专业页面来说是令人困惑的。

即插件/helper.js

const domainHelper = {
  isDomain(domain) {
    if (process.client) {
      return window.location.hostname.includes(domain);
    }
    return false;
  },

在组件/模板内部

  <template>
     <div :class="$domainHelper.isDomain('aaa') ? 'aaa' : 'bbb'">
      ...
  </template>
  <style>
      div.aaa { color: red }
      div.bbb { color: blue }
  </style>

您看到的原因是因为您的组件是在服务器 1 上呈现的 - 您的助手总是在那里返回false ,因此由服务器发送并由浏览器显示的 HTML(甚至Vue 初始化之前!)始终相同并且仅更改在 Vue 接管渲染之后...

要修复它,您需要使用正确的样式在服务器上渲染它。 为此,您需要访问请求。 请求在插件中可用:

~/plugins/domainDetectorPlugin.js

import Vue from "vue";

export default ({ req }, inject) => {
  const host = process.server ? req.headers.host : window.location.host;

  Vue.prototype.$isDomain = string => {
    // implement your detection using host variable defined earlier
  };
};

nuxt.config.js

export default {
  plugins: ['~/plugins/domainDetectorPlugin.js']
}

成分:

<template>
   <div :class="$isDomain('aaa') ? 'aaa' : 'bbb'">
    ...
</template>
<style>
    div.aaa { color: red }
    div.bbb { color: blue }
</style>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM