输入模型的vuejs v-if条件

Posted

技术标签:

【中文标题】输入模型的vuejs v-if条件【英文标题】:vuejs v-if condition for input model 【发布时间】:2017-02-02 06:20:35 【问题描述】:

我只是学习 vue.js 我想显示一个表格数据。我的意见是在显示模式下表格只显示。当我点击表格行的编辑按钮时,我希望这条线转换为模型。

这是我的代码: ```

<table class="table table-bordered">
    <thead>
        <tr>
            <th>id</th>
            <th>name</th>
            <th>pass</th>
            <th>action</th>
        </tr>
    </thead>
    <tbody>
        <template v-for="data in apidata" track-by="$index">
            <tr>
                <td>$index + 1</td>
                <td>
                    <div v-show="data.editmode"><input v-model="data.name"></div>
                    <div v-else>data.name</div>
                </td>
                <td>
                    <div v-if=data.editmode><input v-model="data.name"></div>
                    <div v-else>data.name</div>
                </div>
                </td>
                <td>
                    <button v-on:click="remove($index)" class="btn btn-danger">remove</button>
                    <button v-on:click="edit(data)" class="btn btn-danger">edit</button>
                </td>
            </tr>
        </template>
    </tbody>
</table>

```
my data is like this

    [name:'test', pass:'1', name:'test2', pass:'2']

i bind a edit()function to listen the click event.
    edit: function(data)
                alert(data.editmode);
                data.editmode = true;
            

我认为当我单击 .becuase 时 data.editmode 将变为 true。 此行将转换为输入模式。但它没用。 我试过 v-if=data.editmode , v-if="data.editmode" ,v-show="data.editmode" , 还是一无所获 我不知道为什么?

【问题讨论】:

【参考方案1】:

您只需在数据声明中包含editmode,使其成为响应式数据项。

new Vue(
  el: 'body',
  data: 
    apidata: [
      name: 'test',
      pass: '1',
      editmode: false
    , 
      name: 'test2',
      pass: '2',
      editmode: false
    ]
  ,
  methods: 
    edit: function(data) 
      data.editmode = !data.editmode;
    
  
);
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/1.0.27/vue.min.js"></script>
<table class="table table-bordered">
  <thead>
    <tr>
      <th>id</th>
      <th>name</th>
      <th>pass</th>
      <th>action</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="data in apidata">
      <td>$index + 1</td>
      <td>
        <div v-if="data.editmode">
          <input v-model="data.name">
        </div>
        <div v-else>data.name</div>
      </td>
      <td>
        <div v-if=data.editmode>
          <input v-model="data.pass">
        </div>
        <div v-else>data.pass</div>
      </td>
      <td>
        <button v-on:click="remove($index)" class="btn btn-danger">remove</button>
        <button v-on:click="edit(data)" class="btn btn-danger">edit</button>
      </td>
    </tr>
  </tbody>
</table>

【讨论】:

它是一个很好的解决方案。但是这个数据是用ajax获取的。和它一样 [name:'test', pass:'1', name:'test2', pass:'2' , .....]。 您需要先将editmode 添加到数组项中,然后再将其分配给apidata

以上是关于输入模型的vuejs v-if条件的主要内容,如果未能解决你的问题,请参考以下文章

条件渲染在 vuejs v-if 中不起作用

Vuejs1.0学习

Vuejs基础之:条件列表时间表单

为啥条件渲染不适用于 vuejs 中的表单输入

使用从输入 vueJS 更改的模型更新模板

前端框架Vue------>第一天学习 v-if