Vue学习4----Vue及双向数据绑定,v-model,v-on:click,以及ref获取dom节点

本文介绍了Vue框架中的核心概念——双向数据绑定,通过`v-model`实现视图与模型的同步,以及使用`v-on:click`监听并处理用户点击事件。同时,文章还提及了如何通过`ref`属性来获取DOM节点,便于进行更深入的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:
在这里插入图片描述

源码,复制即可运行
App.vue文件

<!--05 Vue及双向数据绑定,v-model,v-on:click,以及ref获取dom节点-->
<template>
  <div id="app">
    <div>{
  
  {msg}}</div>
    <!--input里面的值改变,影响了msg-->
    <!--v-model 获取输入框中的数据,赋值给msg-->
    <input type="text" v-model="msg">
    <br/>
    <!--ref用来获取dom节点-->
    <input type="text" ref="info">
    <br/>
    <!--点击事件 -->
    <!--input的值改变影响msg-->
    <button v-on:click="getMsg()">获取表单里面的数据get</button>
    <br/>
    <!--msg改变影响input的值-->
    <button v-on:click="setMsg()">设置表单数据set</button>
    <br>
    <button v-on:click="getInputValue()">获取第二个表单里面的数据</button>
  </div>
</template>

<script>
  /**
   mvvm
   Model改变影响View,View改变影响视图
   双向数据绑定必须在表单(元素)里使用
   这个例子里面就是:input里面的值改变,影响了
### Vue.js 中 `v-model` 和 `ref` 操作数组的方法 #### 使用 `v-model` 进行双向数据绑定Vue 3 中,`v-model` 提供了一种简便的方式来实现双向数据绑定。对于数组类型的变量,可以将其绑定到多个表单元素上,从而允许用户修改这些元素的内容并自动更新数组中的对应项。 ```html <template> <div> <ul> <li v-for="(item, index) in items" :key="index"> <input type="text" v-model="items[index]" /> </li> </ul> <p>当前列表:</p> <pre>{{ JSON.stringify(items, null, 2) }}</pre> </div> </template> <script setup> import { ref } from 'vue'; const items = ref(['苹果', '香蕉', '橙子']); </script> ``` 这段代码展示了如何使用 `v-model` 来编辑一个字符串数组 `items`[^1]。每当用户更改某个 `<input>` 字段时,对应的数组元素会立即得到更新;反之亦然。 #### 利用 `ref` 访问 DOM 或组件实例 当涉及到更复杂的交互逻辑时,比如动态调整样式或执行特定于浏览器的操作,则可能需要用到 `ref` 属性来获取对实际 DOM 节点或自定义组件实例的引用。 下面的例子说明了如果要改变一组由循环渲染出来的项目颜色: ```html <template> <div> <button @click="changeColor">点击变色</button> <ul> <li v-for="(item, idx) in listItems" :key="idx" ref="listItemRefs">{{ item }}</li> </ul> </div> </template> <script setup> import { ref, onMounted } from 'vue'; import _ from 'lodash'; // 假设我们引入 lodash 库辅助操作 // 定义响应式的列表数据 let listItems = ref([/* ... */]); // 创建 refs 数组保存每一个 li 的引用 let listItemRefs = ref([]); onMounted(() => { console.log(listItemRefs.value); // 输出所有 li 元素节点组成的 NodeList 对象 }); function changeColor() { _.forEach(listItemRefs.value, (el, i) => el.style.color = getRandomColor()); } function getRandomColor() { return '#' + Math.floor(Math.random()*16777215).toString(16); } </script> ``` 这里的关键在于声明了一个名为 `listItemRefs` 的 `ref[]` 类型变量,在模板里给每个迭代生成的 `<li>` 添加相同的 `ref` 名字,这样就能收集所有的目标元素形成一个集合[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值