【问题标题】:VUE: How to use prop with CSS modules?VUE:如何在 CSS 模块中使用 prop?
【发布时间】:2020-10-02 07:11:54
【问题描述】:

row.vue

<script>
  export default {
    name: "Row",
    data() {
      return {
        app: [
          "row",
          "row-test",
          "flex-center"
        ]
      }
    },
    template: `
      <div :class="$module[app]"><slot></slot></div>
    `
  }
  </script>

row.scss

.row {
  color: red; 
}
.row-test {
  color: green; 
}
.flex-center {
  align-items: center;
  justify-content: center; 
}

App.vue

<template>
  <div id="app">
    <row app="row-test flex-center">my row</row>
    <router-view />
  </div>
</template>

vue.config.js

css: {
  requireModuleExtension: true,
  loaderOptions: {
    css: {
      modules: {
        localIdentName: 'hex-[HASH:HEX:3]'
      }
    }
  },
  modules: true
}

我想使用 app 属性声明我的属性,它们的编写方式与普通类类似。然后我希望row.vue中有一个数组,它将只添加我在其中定义的值并使用CSS模块将它们转换为CSS(类是随机生成的)

我明白了

<div app="row-test flex-center">my row</div>

预期结果

<div class="hex-g3D hex-f41">my row</div>

【问题讨论】:

  • Row 组件中app 被声明为数据属性,在App.vue 中作为prop 传递

标签: javascript vue.js sass vuejs2 vue-component


【解决方案1】:

如果您将 app 作为 prop 传递给 Row 组件,请定义一个计算属性以返回具有不同类的模块:

<script>
  export default {
    name: "Row",
   props:['app'],
  computed:{
   modules(){
     return this.app.length? this.app.map(_class=>{
            return this.$module[_class];
      }):[];
    }
  },
    template: `
      <div :class="modules"><slot></slot></div>
    `
  }
  </script>

然后像这样传递它:

<template>
  <div id="app">
    <row :app="['row-test', 'flex-center']">my row</row>
    <router-view />
  </div>
</template>

【讨论】:

  • 我能像这样声明 app="row-test flex-center" 没有所有这些括号吗?
  • 不,没有括号和引号是不可能的
  • 不使用数组会不会是另一种方式?
  • 我希望道具应用与类大致相同,我的意思是像 app="row-test flex-center 等声明它并将其转换为模块。我以为我可以在这个中使用经典类而不是道具应用案例?(谷歌翻译)
  • 我想你希望row-test flex-center 应该是一个字符串,它相当于:class="$module['row-test flex-center']"
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2021-10-26
  • 2021-01-28
  • 1970-01-01
  • 2020-07-25
  • 2018-09-10
相关资源
最近更新 更多