如何在 vue 组件中的 createElement 之后应用 css 样式?

Posted

技术标签:

【中文标题】如何在 vue 组件中的 createElement 之后应用 css 样式?【英文标题】:How to apply css style after createElement in vue component? 【发布时间】:2019-01-23 03:07:48 【问题描述】:
<template>
  <div id="body">
    <button type="button" @click="create">Create</button>
  </div>
</template>
<script>
  export default 
    methods: 
      create () 
        let e = document.createElement('input');
        e.classList.add('input-test');
        e.setAttribute('type', 'text');
        e.setAttribute('value', 'test');
        document.getElementById('body').appendChild(e);
      
    
  
</script>
<style scoped>
.input-test 
  color: red;

</style>

我试过这段代码。但是没有应用输入测试样式。 为什么不能应用于元素? 当我删除样式标签的作用域时,它可以工作。

【问题讨论】:

【参考方案1】:

如果您查看 vue 如何处理样式范围,您会发现所有元素都会获得一个范围标识符,该标识符将添加到您的范围 css 中。任何新创建的元素都不会被 vue 转译,因此它不会获得所需的范围标识符。

如果您只想在单击按钮时显示一个元素,则应将其添加到 dom 并仅在单击时显示它 v-if directive

【讨论】:

【参考方案2】:

我通过深度选择器解决了 deep selectors

【讨论】:

【参考方案3】:

我在这里找到了解决方案:https://***.com/a/49926050/5899698

createElement 的结果元素中,您可以使用以下方法添加作用域 css 标识符:

e.setAttribute(this.$options._scopeId, '');

【讨论】:

我已经解决了,但你的回答也很有帮助。非常感谢。

以上是关于如何在 vue 组件中的 createElement 之后应用 css 样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个文件 vue 组件中的初始化时将道具传递给 vue 组件(vue-loader 中的依赖注入)?

如何在 Vue.js 中的动态组件上使用组件特定属性?

如何在js文件中获取vue组件对象的data方法中的属性

如何在Vue中的非父子组件之间共享数据

如何在Vue中的非父子组件之间共享数据

如何在Vue中的非父子组件之间共享数据