当前位置: 首页 > news >正文

Vue的双向绑定及应用

处理用户输入

用户输入就是input,textarea及其他的选择框

v-model双向绑定–input

在这里插入图片描述

当改变下面input的输入框时,上面的框里的内容也会变

html:

<template>
  <p class="page">{{message}}</p>
  <input type="text" v-model="message" placeholder="请输入你想输入的内容" />
</template>

变量:

<script>
export default {
    name: "app",
    data() {
        return {
            message: ""
        };
    }
};
</script>

双向绑定就是改变message的值,input里面的值也要改变,改变input的值,message的值也要改变,只需加上v-model标签

textarea和input一样

v-model双向绑定–checkbox复选框

<div class="food">
  <div class="check-box">
    <input type="checkbox" value="新奥尔良鸡腿堡" v-model="checkedGoods" />
  </div>
  <div class="food-name">新奥尔良鸡腿堡</div>
  <div class="food-price">¥24</div>
</div>
<script>
export default {
    name: "app",
    data() {
        return {
            checkedGoods: []
        };
    }
};
</script>

处理用户事件

js的dom中对事件的处理:

document.getElementById("btn").addEventListener("click", function () {
  alert("Hello World");
});

在vue中:

v-on:(事件绑定)

第一步:给元素添加点击事件,vue中不叫添加事件,叫事件绑定

<button v-on:click="add">按钮</button>

这样按钮就注册了一个点击事件,点击就会驱动add方法,再联系js

ps:vue为了方便用户开发,基本上每一个指令都有简写模式,比如v-on简写就是@符号

<button @click="add">按钮</button>
methods(方法)

第二步:给点击事件添加方法

  1. 抽离方法,只需将js中的匿名方法写在vue的规定的位置
let alertFn = function () {
  alert("Hello World");
};

document.getElementById("btn").addEventListener("click", alertFn);
  1. 书写位置

就是alerrFn的位置,在

<script>
export default{
    name:"app",
    methods:{
        // 在这里存放方法
    }
}
</script>
  1. 抽离的方法写在对应的位置key:value形式
<script>
export default{
    name:"app",
    methods:{
        // 在这里存放方法
    }
}
</script>
案例

<template>
  <p>{{ counter }}</p>
  <button @click="add">点击</button>
</template>
<script>
export default {
    name: "app",
    data() {
        return {
            // 初始次数
            counter:0
        };
    },
    methods:{
        add:function(){
            // 这里的this指向当前的vue实例
            this.counter++
        }
    }
};
</script>

注意:

  1. this指向的是当前Vue实例,如果要用在data中定义的变量就要加this

  2. @click="add"的完整写法是@click="add()",在括号离可以传递参数

<button @click="add">点击</button>
<!-- 等同于 -->
<button @click="add()">点击</button>

<!-- 当你的方法需要接收参数的时候,你可以将参数写在这个括号内 -->
<button @click="add(number)">点击</button>

相应的method上也要添加参数

事件修饰符

事件修饰符通常还要用到三种

  1. 阻止冒泡事件
<div @click.stop="fn2"></div>
  1. 捕获事件
<div class="div2" @click.capture="fn2"></div>
  1. 阻止默认事件
<div class="div2" @click.prevent="fn2"></div>

监听数据变化

vue中是通过侦听器来实现

watch的基本用法

书写位置
<script>
  export default {    name: "app",    // 侦听器 key---watch value---{}
    watch: {}  };
</script>

顺序无所谓

侦听对象

就是data中的变量,变量发生变化侦听器就开始运行

<script>
  export default {    
    name: "app",    
    data: function () {      
        return {        
            count: 1
      };    
    },    
    watch: {      
        count() {        
            console.log("count发生了变化");      
                }    
        }  
    };
</script>

侦听器里面的方法一定要和被侦听的变量名一样

侦听器运行时机

count要运行的话变量count就要变化

就需要添加改变count的方法

侦听器进阶用法

获取前一次的值

侦听器可以给我们两个值,旧值和新值,添加一个参数即可获取旧值

watch:{
    inputValue(value,oldValue) {
        // 第一个参数为新值,第二个参数为旧值,不能调换顺序
        console.log(`新值:${value}`);
        console.log(`旧值:${oldValue}`);
    }
}

handler方法和immediate属性

当我们侦听的值没有发生改变的时候是不会触发侦听器的,并且页面第一次渲染也不会触发侦听器

如果需要让页面第一次渲染的时候就触发侦听,就要immedidate属性

之前侦听器都是简写,实际侦听器是一个对象,里面包含handler方法和其他属性

watch: {
      firstName: {
        handler: function (newName, oldName) {
          this.fullName = newName + " " + this.lastName;
        },
        immediate: true
      }
    }

当immediate属性为true时不论数据是否变化,页面刷新后handler方法都会运行

相关文章:

  • 编程的基础知识
  • Vue介绍和入门,包括配置等
  • 编程猫创作工具:新版Kitten新体验
  • SpringBean面试题
  • Linux installation of Davinci Adaptive IDE
  • 基于SSM的住院病人监测预警信息管理系统毕业设计源码021054
  • 字节一面:说说TCP的三次握手
  • 数据中台不是万能钥匙,企业需求才是数据中台建设的根本
  • Hadoop 集群时间同步设置
  • yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • Android——Activity和Fragment的通信方式
  • 【校招VIP】前端项目开发之正则表达
  • Vite创建Vue2项目中,封装svg-icon组件并使用——插件之vite-plugin-svg-icons和fast-glob
  • 洛谷题单 Part2.1 模拟
  • Selenium 中的 JUnit 注解
  • egg(89)--egg之redis的发布和订阅
  • Go 语言编译器的 //go: 详解
  • JAVA多线程机制解析-volatilesynchronized
  • Java知识点总结(JavaIO-打印流)
  • jquery cookie
  • Next.js之基础概念(二)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python实现BT种子转化为磁力链接【实战】
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • WePY 在小程序性能调优上做出的探究
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 大整数乘法-表格法
  • 给新手的新浪微博 SDK 集成教程【一】
  • 配置 PM2 实现代码自动发布
  • 双管齐下,VMware的容器新战略
  • 正则表达式
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​渐进式Web应用PWA的未来
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #AngularJS#$sce.trustAsResourceUrl
  • #Spring-boot高级
  • $jQuery 重写Alert样式方法
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)使用Nexus创建Maven私服
  • (一)UDP基本编程步骤
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)树状数组
  • .gitignore文件—git忽略文件
  • .NET DataGridView数据绑定说明
  • .net framework profiles /.net framework 配置
  • .Net mvc总结
  • .NET 读取 JSON格式的数据
  • .NET 分布式技术比较
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net访问oracle数据库性能问题