Vue.js-如何获取和设置组件输入字段的值?

时间:2018-12-07 09:04:48

标签: javascript vue.js

我刚开始学习Vue.js,但是遇到一个问题,我无法弄清楚如何访问和更改组件内部的文本字段值。

假设我要访问或更改组件内部第一个输入字段的值

我的组件

Vue.component('simple-input',
{
    template: `
        <input type="text" value="Some value...">
    `,
});

HTML

<div id="root">
  <simple-input></simple-input>
  <simple-input></simple-input>
  <simple-input></simple-input>

  <div @click="alertSimpleInput1">Show first input value</div>
  <div @click="changeInput1('new value')">Change input value</div>

  <div @click="alertSimpleInput2">Show second input value</div>
</div>

main.js

new Vue({
    el: '#root',
});

2 个答案:

答案 0 :(得分:3)

模板中包含value="Some value..."意味着输入的值最初将设置为字符串“ Some value ...”。您需要将输入的值 bind 绑定到组件上的data属性。使用v-model进行双向绑定(输入值更改时,它将更新data属性的值,反之亦然)。

在您的示例中,实际上涉及的内容更多,因为您要从根组件获取输入的值,因此<simple-input>组件必须公开此内容;做到这一点的方法是使用 props (用于父级到子级数据流)和 events (用于子级到父级数据流)。

未经测试:

Vue.component('simple-input', {
  template: `
    <input type="text" :value="value" @input="$emit('input', $event.target.value)">
  `,
  props: ['value'],
});
<div id="root">
  <simple-input v-model="value1"></simple-input>
  <simple-input v-model="value2"></simple-input>
  <simple-input v-model="value3"></simple-input>

  <button @click="alertSimpleInput1">Show first input value</button>
  <button @click="changeInput1('new value')">Change input value</button>
  <button @click="alertSimpleInput2">Show second input value</button>
</div>
new Vue({
  el: '#root',

  data: {
    value1: 'Initial value 1',
    value2: 'Initial value 2',
    value3: 'Initial value 3',
  },

  methods: {
    alertSimpleInput1() {
      alert(this.value1);
    },

    alertSimpleInput2() {
      alert(this.value2);
    },

    changeInput1(newValue) {
      this.value1 = newValue;
    },
  },
});

我了解您只是在学习Vue,但对于初学者来说,还有很多需要解决的问题。我不会详细介绍,因为已经有很多关于这些概念的信息。

阅读以下内容:

答案 1 :(得分:0)

您可以为此使用$ emit方法。

<simple-input @clicked="inputValue" :name="name"></simple-input>

parent methods

export default {

 data: function () {
    return {
       name:null
    }
  },
  methods: {
   inputValue (value) {
    console.log(value) // get input value
   }
 }
}
  Vue.component('simple-input', {
  data: function () {
    return {
       // name:null
    }
  },
  watch:{
    'name':function(){
        this.$emit('clicked', this.name)
    }
   template: '<input type="text" v-model="name">'
   props:['name']
})