4.vue 的双向绑定的原理是什么?_监听门事件

4.vue 的双向绑定的原理是什么?_监听门事件vue:双向绑定原理、监视函数、事件修饰符、双向绑定在不同表单元素中的原理。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

目录

双向绑定

1. v-model

2. 双向绑定原理(高频笔试面试)

3. 监视函数

4. 事件修饰符

5. 双向绑定在不同表单元素中的原理


双向绑定

        前面的指令和 {
{ }} 都是单向绑定,当用户主动在文本框中输入内容后,如果使用 :value=”str” 方式绑定,用户输入的内容是无法自动回到程序中的变量中保存的。这是因为单向绑定只能将程序中的变量值,自动同步到页面上显示,不能自动将界面中的用户主动做的修改,自动同步回程序中变量里保存。

1. v-model

        如果希望在表单元素自动获得页面中用户主动做的修改时,都要用双向绑定。

        双向绑定既能将程序中的变量自动同步到页面上显示,又能将页面上用户主动修改的新值自动更新回程序中的变量保存。

 <表单元素 v-model="变量">

举例:使用双向绑定实现点按钮,获得文本框中用户输入的内容;

<body>
  <!--VUE 3步
  1. 做界面
  1.1 唯一父元素包裹
  1.2 找可能发生改变的位置
  本例中: 文本框的内容(input的value)会由用户修改而改变
  1.3 找触发事件的元素
  本例中: 按钮button
-->
  <div id="app">
    <!-- <input id="txt" :value="str"> -->
    <input id="txt" v-model="str">
    <button @click="search">百度一下</button>
  </div>
  <script>
    //2. 创建new Vue()对象,监视id为app的区域
    var vm = new Vue({
      el: "#app",
      //3. 创建模型对象
      //3.1 data: 本例中,界面中需要一个str变量,保存用户输入的关键字
      data: {
        str: ""
      },
      //3.2 methods: 本例中: 界面中需要一个search函数
      methods: {
        search() {
          console.log(`正在搜索${this.str}相关的内容`);
        }
      }
    })
  </script>
</body>

效果如下:

4.vue 的双向绑定的原理是什么?_监听门事件

2. 双向绑定原理(高频笔试面试)

        双向绑定就是在单向绑定的基础上,自动为元素添加 onchange 或 oninput 事件处理函数,并能在事件处理函数中,自动将新值更新到 data 中的变量中。

        a. 自动添加事件绑定

        b. 访问器属性

        c. 虚拟DOM树

举例:使用 :value+@input 事件模拟实现双向绑定;

<body>
  <!--VUE 3步
  1. 做界面
  1.1 唯一父元素包裹
  1.2 找可能发生改变的位置
  本例中: 文本框的内容由用户主动输入而改变
  1.3 找触发事件的元素
  本例中: 点按钮执行搜索操作-->
  <div id="app">
    <input :value="str" @input="input" id="txt">
    <button @click="search">百度一下</button>
  </div>
  <script>
    //2. 创建new Vue()对象,监视id为app的区域
    var vm = new Vue({
      el: "#app",
      //3. 创建模型对象
      //3.1 data: 本例中,界面中需要一个str变量,保存用户输入的关键字
      data: {
        str: "" //开局,用户什么都没输入,默认""
      },
      //3.2 methods: 本例中: 界面中需要一个search函数
      methods: {
        input(e) {
          this.str = e.target.value;
        },
        search() {
          console.log(`搜索 ${this.str} 相关的内容`)
        }
      }
    })
  </script>
</body>

4.vue 的双向绑定的原理是什么?_监听门事件

3. 监视函数

        专门用于监视一个变量的变化,并在变量值发生变化时自动执行的一个函数,只要希望一个变量的值一改变,我们就能自动执行一项操作时,都可用监视函数 watch。

 new Vue({
    data:{
      变量名: 值
    },
    //监视函数
    watch:{
	  变量名(){
		//只要上面data中同名变量的值一发生改变,watch中的同名监视函数就会自动执行
      }
    }
  })

举例(上例):实现按回车搜索和一边输入一边搜索;

4.vue 的双向绑定的原理是什么?_监听门事件

效果如下:

4.vue 的双向绑定的原理是什么?_监听门事件

4. 事件修饰符

        简化版的对事件的约束,想改变事件的默认行为或约束触发事件的条件时,就用事件修饰符。

(1)限制用户按的键盘号

//DOM
事件处理函数(e){
  if(e.keyCode==13){
     ...  ...
    }
   }

//vue
<元素 @事件名.13="事件处理函数"

(2) 停止冒泡

//DOM 
事件处理函数(e){
  e.stopPropagation();
    ... ...
 }

//vue
<元素 @事件名.stop="处理函数"

(3) 阻止默认行为

//DOM
事件处理函数(e){
 e.preventDefault()
   ... ...
  }

//vue
<元素 @事件.prevent="事件处理函数">

(4)多个事件修饰符连用 

<元素 @事件.stop.prevent="事件处理函数">

//等效于: 

事件处理函数(e){
  e.stopPropagation()
  e.preventDefault()
 }

具体用法如下:

4.vue 的双向绑定的原理是什么?_监听门事件

5. 双向绑定在不同表单元素中的原理

(1)文本框 <input type=”text”> 和文本域 <textarea>

        首次加载时,v-model 将程序中变量的值更新到页面上的文本框中显示,当用户主动在文本框中输入内容时,v-model 自动将用户输入的内容更新回程序中变量中保存。

(2)单选按钮 <input type=”radio”> 多选一

<input type="radio" name="sex" value="1" v-model="sex">男
<input type="radio" name="sex" value="0" v-model="sex">女

        为每个 <input type=”radio”> 备选项上添加一个 v-model=”sex”。首次加载页面时,v-model 读取程序中的变量值,用变量值自动与每个 radio 固定 value 值做比较,如果哪个 radio 的固定 value 值刚好等于变量值,则当前 radio 自动选中。否则如果 radio 固定 value 值与变量值不相等,则 radio 不选中;当用户切换选中项时,v-mode 只会自动将选中的一个 radio 身上固定 value 值更新到程序中变量里保存,如果未选中的 radio 身上的 value 值是不需要放回程序中的。

举例:获取选择的性别;

<body>
  <div id="app">
    性别:
    <input type="radio" name="sex" value="1" v-model="sex">男
    <input type="radio" name="sex" value="0" v-model="sex">女
    <br />
    <h3>您选择的性别是:{
  
  {sex}}</h3>
  </div>
  <script>
    new Vue({
      el: "#app",
      data: {
        sex: 1
      }
    })
  </script>
</body>

4.vue 的双向绑定的原理是什么?_监听门事件 效果如下:

4.vue 的双向绑定的原理是什么?_监听门事件4.vue 的双向绑定的原理是什么?_监听门事件 

(3)下拉列表 <select>

<select>
   <option  value="备选值1">
   <option  value="备选值2">
   <option  value="备选值3">
 </select>

        一个 <select> 下包含多个 <option>,每个 <option> 上都有一个固定的备选值 value 属性,只要在父元素 <select> 上写一个 v-model=”变量” 即可。

        加载数据时 v-model 会读取程序中的变量值,自动跟 <select> 下每个 option 上固定 value 值做比较,哪个 option 上固定 value 值与变量值一致,则哪个 option 被选中,反之其余 value 值与变量值不相等的 option,就不选中;当用户主动切换 select 中的选中项后,v-model 只会将选中的 option 的 value 值自动更新回程序中变量里保存。        

举例:选择城市,切换城市图片;

<body>
  <!--VUE 3步
  1. 做界面
  1.1 唯一父元素
  1.2 找可能发生变化的位置: 
  本例中:select选中的option会由用户主动改变而变化
        img的src属性会随程序变化而变化
-->
  <div id="app">
    请选择城市:
    <select v-model="src" id="sel">
      <option value="img/bj.jpg">北京</option>
      <option value="img/sh.jpg">上海</option>
      <option value="img/hz.jpg">杭州</option>
    </select><br />
    <br />
    <img style="width:300px" :src="src">
  </div>
  <script>
    //2. 创建new Vue()对象
    new Vue({
      el: "#app",
      //3. 创建模型对象
      data: {
        src: "img/bj.jpg"
      }
    })
  </script>
</body>

4.vue 的双向绑定的原理是什么?_监听门事件

效果如下:

4.vue 的双向绑定的原理是什么?_监听门事件4.vue 的双向绑定的原理是什么?_监听门事件

(4)复选框 checkbox 单独使用

<input type="checkbox">同意

复选框没有 value 值,只要在、<input>上写一个 v-model=”变量” 即可。

<input type="checkbox" v-model="变量">

        加载数据时 v-model 先取出变量值,将变量值赋值给 checkbox 的 checked 属性,如果checked 属性为 true,则当前 checkbox 选中,如果 checked 属性值为 false,则当前 checkbox 就不选中;当用户切换当前 checkbox 的选中状态后,v-model 会将当前 checkbox 的 checked 属性的新状态 bool 值,自动更新回程序中的变量里保存。

举例:点同意,启用元素;不同意,禁用元素;

<body>
  <!--VUE 3步
  1. 做界面
  1.1 唯一父元素
  1.2 找可能发生变化的位置: 
  本例中: checkbox由用户主动修改其选中状态,用v-model绑定
         其余三个表单元素的disabled属性随checkbox的选中状态的改变而被动发生变化,用:disabled
  -->
  <div id="app">
    <!--不同意(agree=false)时,禁用(disabled=true)
        同意(agree=true)时,启用(disabled=false)
        让disabled属性值与agree相反即可!-->
    <br />
    用户名:<input :disabled="!agree"><br />
    <br />
    密码:<input :disabled="!agree" type="password"><br />
    <br />
    <input type="checkbox" v-model="agree">同意<br />
    <br />
    <button :disabled="!agree">注册</button>
  </div>
  <script>
    //2. 创建new Vue()对象
    new Vue({
      el: "#app",
      //3. 创建模型对象
      data: {
        agree: false //开始时默认不同意
      }
    })
  </script>
</body>

4.vue 的双向绑定的原理是什么?_监听门事件

效果如下:

4.vue 的双向绑定的原理是什么?_监听门事件4.vue 的双向绑定的原理是什么?_监听门事件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180912.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jQuery的目标

    jQuery的开篇声明里有一段非常重要的话:jQuery是为了改变javascript的编码方式而设计的。从这段话可以看出jQuery本身并不是UI组件库或其他的一般AJAX类库。jQuery改变ja

    2021年12月24日
  • Opencv学习笔记(九)光流法

    Opencv学习笔记(九)光流法原创文章,转贴请注明:http://blog.csdn.net/crzy_sparrow/article/details/7407604   本文目录:     一.基于特征点的目标跟踪的一般方法     二.光流法     三.opencv中的光流法函数    四.用类封装基于光流法的目标跟踪方法     五.完整代码     六.参考文献

  • fileinput模块读取文件「建议收藏」

    fileinput模块读取文件「建议收藏」fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性读取所有行。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。【典型用法】importfileinputforlineinfileinput.input…

  • High Quality Monocular Depth Estimation via Transfer Learning论文学习

    High Quality Monocular Depth Estimation via Transfer Learning论文学习HighQualityMonocularDepthEstimationviaTransferLearning贡献方法网络结构复杂性和性能学习损失函数增强策略实验结果数据集实验细节评估质量评估定性结果AblationStudies深度编码深度解码颜色增强泛化到其他数据集结论代码实现arXiv:1812.11941v2[cs.CV]10Mar2019贡献三个方面。第一,…

  • 对比学习、自监督学习的理解「建议收藏」

    对比学习、自监督学习的理解「建议收藏」自监督学习定义:自监督学习主要是利用辅助任务从大规模的无监督数据中挖掘自身的监督信息来提高学习表征的质量,通过这种构造监督信息对网络进行训练,从而可以学习到对下游任务具有价值的表征。辅助任务(pretext):可以认为是一种为达到特定训练任务而设计的间接任务。pretext任务的好处是为了简化原任务的求解,在深度学习中就是避免人工标记样本,实现无监督的语义提取。Pretext任务可以进一步理解为:对目标任务有帮助的辅助任务。主要pretexttask包括:图像旋转、图像着色、图像修复。下游任务:图

  • python 离散数学 判断单射 双射 满射

    python 离散数学 判断单射 双射 满射#离散数学判断单射双射满射defpanduan(sets):#单射标志danshe=True#满射标志manshe=True#将传入对象分隔开,存入两个变量set1,set2=sets#判断是否单射#遍历set1,set2中所有数据,是否在set2,set1中存在映射,判断是否满足单射或者满射foriinset1:#单射判断#如果set2中存在

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号