【问题标题】:VueJS bind style with class selectorVueJS 使用类选择器绑定样式
【发布时间】:2019-05-14 02:51:16
【问题描述】:

我想在这里实现一些非常简单的东西,在 CSS 中:

.p {
    color: /*something from javascript logic*/;
}

通过查看 VueJS 文档,Style binding 有一种方法可以实现:

<p :style="{color:/*something from javascript*/}"> ... </p>

但是,要这样做,就意味着我需要添加每个 p 标签这样的行,这并不是一个很好的解决方案。

我想要的,就像问题的开头一样,写成这样的

.p {
    color: {{mycolor}};
}

这样我就可以做到一次,到处申请。

有没有一种巧妙的方法来做到这一点?即在 VueJS 样式绑定中应用类选择器?非常感谢!

【问题讨论】:

    标签: vue.js vuejs2


    【解决方案1】:

    在 Vue 中没有标准的方法。

    不过,有一个解决方法/解决方案,它只是一个自定义组件(比如 &lt;v-style&gt; 或您选择的任何名称),因此它与任何其他组件以及 Vue 的所有产品一样可重用——比如 @987654322 @ -- 可以用在它的标签上。这是它的外观:

    Vue.component('v-style', {
      render: function (createElement) {
        return createElement('style', this.$slots.default)
      }
    });
    
    
    // demo usage, check the template
    new Vue({
      el: '#app',
      data: {
        myColor: 'red'
      }
    })
    <script src="https://unpkg.com/vue"></script>
    
    <div id="app" class="stuff">
      <v-style>
        .p {
          color: {{myColor}};
        }
      </v-style>
    
      <div class="p">
      Remove "red" and type "yellow":
      <input class="setting" type="text" v-model="myColor">
      </div>
    </div>

    注意事项:生成的样式只有在组件存在时才会存在

    另一个小缺点是,由于标签的名称是 &lt;v-style&gt;(或您选择的任何名称)而不是 &lt;style&gt;,IDE 可能无法很好地着色它。但否则它就像一个普通的&lt;style&gt; 标签。

    【讨论】:

    • 你为什么不让你的自定义组件接受颜色作为道具?
    • @Michael 没有具体原因,真的。这几乎是可行的(道具)。在我给出的示例中,目标是拥有一个“可模板化”的样式标签,而不仅仅是一个参数化的颜色样式。但我明白你的意思。如果这是 OP 所需要的,那么将 props 添加到 v-style 甚至更简单的组件(没有默认插槽功能)非常简单。
    • @Michael 我认为做对了,因为这里的问题实际上是我实际处理的问题的一个更简单的版本,所以我希望答案尽可能通用。
    • 这是一个非常好的解决方案,我将其作为公认的答案,但如果有人知道为我们执行此操作(甚至更强大)的包,请提出建议。因为它可能使代码更容易开发,因为其他人可以通过检查特定包的文档来轻松理解它,而不是试图弄清楚 是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2018-03-02
    • 2014-09-27
    • 1970-01-01
    相关资源
    最近更新 更多