如何在我的 Vue.js 应用程序之外修改部分 DOM,例如 <link> 标记?

Posted

技术标签:

【中文标题】如何在我的 Vue.js 应用程序之外修改部分 DOM,例如 <link> 标记?【英文标题】:How do I modify part of the DOM outside of my Vue.js app such as a <link> tag? 【发布时间】:2019-08-13 00:10:05 【问题描述】:

我有一个 Vue.js 应用程序,其主模板如下所示:

<html>
<head>
  <link id="theme" rel="stylesheet" href="foo.css">
</head>
<body>
  <div id="app"></div>
</body>
</html>

作为我的 Vue.js 代码的一部分,我可以轻松地修改 #app 中的任何内容,但是稍后我想从一个组件中修改 #theme,其中 &lt;select&gt; 用于选择要使用的主题。

【问题讨论】:

这有关系吗? ***.com/questions/46730904/… 如果我理解正确的话..您仍然可以像使用 vanilla JS 一样更改&lt;link&gt; 元素的id .. [从任何组件中] document.getElementById("theme").id = "myNewTheme" 【参考方案1】:

使用材料设计颜色 css 制作了一个 JSFiddle:https://jsfiddle.net/rk5ytqs3/2/

在数据中分配主题名称,css url

    themes:[
    color:'blue', url:'https://code.getmdl.io/1.3.0/material.light_blue-light_green.min.css', 
    color:'orange', url:'https://code.getmdl.io/1.3.0/material.orange-yellow.min.css', 
  color:'purple', url:'https://code.getmdl.io/1.3.0/material.deep_purple-red.min.css', 
  color:'pink', url:'https://code.getmdl.io/1.3.0/material.pink-indigo.min.css', 
    ]

使用 v-for 并将它们分配给选择

<select name="theme" @change="changetheme">
    <option v-for="(theme, index) in themes" :value="index">theme.color</option>
   </select>

当用户通过方法选择更改主题时

changetheme(event) 
  let val = event.target.value

  document.querySelector('#theme').href = this.themes[val].url

一般来说,在您的应用程序之外修改 DOM 被认为是一种副作用。因此,此代码应该是您的高阶组件的一部分。

【讨论】:

以上是关于如何在我的 Vue.js 应用程序之外修改部分 DOM,例如 <link> 标记?的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js:为啥我的单文件组件没有在我的模板中呈现/显示

如何在我的 .cshtml 页面中调用 Vue 组件?

如何阻止 vue cli3 构建将 vue.js.min 包含在我的 chunk-vendors.js 文件中?

如何在 Vue.js 中使用 dotenv

如何在 Vue.js - Nuxt - TypeScript 应用程序中访问路由参数?

在 Vue.js 中,如何滚动到导入的组件?