如何在VueJS中的组件中创建动态类值?

时间:2017-02-10 08:05:08

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

所以我创建了一个简单的组件:

Vue.component('m-textbox', {
  template: `
   <div>
    <div class="input-field col s12 m6 l6">
      <input :id="id" type="text" :value="value" @input="$emit('input', $event.target.value)">
      <label :for="id">{{ label }}</label>
    </div>
   </div>
  `,
  props: ["id", "value", "label", "for"]
})

我在我的html中使用它:

<m-textbox v-model="full_name" id="full_name" label="Full Name"></m-textbox>

现在我想做的是使列可设置。您可以看到默认值为col 12 m6 l6。有没有办法使它充满活力?例如,我可以<m-textbox v-model="full_name" id="full_name" label="Full Name" classSize="col s12 m6"></m-textbox>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

希望它真的很简单。不确定语法是否正确,因为我正在使用webpack和单个文件组件,所以很抱歉,如果语法有问题。

一种方式:

Vue.component('m-textbox', {
  template: 
   `<div>
    <div :class="size">
      <input :id="id" type="text" :value="value" @input="$emit('input', $event.target.value)">
      <label :for="id">{{ label }}</label>
    </div>
   </div>`
  ,
  props: ["id", "value", "label", "for", 
           size: 
           { type: 'string', default: 'input-field col s12 m6 l6'}]
})

其他方式:

Vue.component('m-textbox', {
  template: 
    `<div class="input-field">
      <input :id="id" type="text" :value="value" @input="$emit('input', $event.target.value)">
      <label :for="id">{{ label }}</label>
    </div>`
  ,
      props: ["id", "value", "label", "for"]
    })

并使用它: <m-textbox v-model="full_name" id="full_name" label="Full Name" v-bind:class="[col, s12, m6]"></m-textbox>

答案 1 :(得分:1)

您可以删除组件模板中的外部div,只需将class属性添加到组件即可。它甚至会合并你的课程。

Vue.component('m-textbox', {
  template: `
    <div class="input-field col">
      <input :id="id" type="text" :value="value" @input="$emit('input', $event.target.value)">
      <label :for="id">{{ label }}</label>
    </div>
  `,
  props: ["id", "value", "label", "for"]
})
<m-textbox v-model="full_name" id="full_name" label="Full Name" class="s12 m6 l6"></m-textbox>