Vue.js基础语法学习(vue2)(三)

Vue.js基础语法学习(vue2)(三)

七、JavaScript高阶函数的使用

①filter过滤器的使用:

过滤数据时可以使用

const nums = ['308','852','88','173','156','21','25','33']
// filter中的回调函数有一个要求:必须返回一个布尔值
// 当返回true时,函数内部会自动将回调的n加入新的数组中去
// 当返回false时,函数内部会过滤掉此次的n

// 要求返回所有小于100的数存到新数组
let newNums = nums.filter(function(n){
    return n < 100
})
②map函数的使用:

当想对数组里每一个元素进行变化时可以使用

const nums = ['30','82','88','13','15','21','25','33']
// 当想对数组里每一个元素进行变化时可以使用
let newNums = nums.map(function(n){
  return n*2
})
console.log(newNums);
③*reduce函数的使用:

reduce作用:对数组中所有的内容进行汇总

const nums = ['20','40','80','100']

// reduce(第一个参数是一个函数,第二个参数是preValue的初始值)
let total = nums.reduce(function(preValue,n){
    return preValue+n
},0)

// 因为数组里面有4个元素,所以应该要遍历四次
// 第一次:preValue=0(括号后面的初始值),n=20;
// 第二次:preValue=第一次调用函数的返回值:20,n=40;
// 第三次:preValue=第二次调用函数的返回值:60,n=80;
// 第四次:preValue=第三次调用函数的返回值:140,n=100
// 最终:返回240
汇总:

一个数组先找出小于100的数,然后乘以2,最后汇总:

const newNums = ['90','55','400','108','32','74']
let totals = newNums.filter(function(n){
  return n<100
}).map(function(n){
  return n*2
}).reduce(function(preValue,n){
  return preValue+n
})
console.log(totals);

// 箭头函数写法:
let t = newNums.filter(n => n<100).map(n => n*2).reduce((preValue,n) => preValue+n);
console.log(t)

八、表单绑定v-model的使用:

①v-model的原理:
  • 表单控件在实际开发中是非常常见的,特别是对于用户信息的提交需要大量的表单。

  • Vue中使用v-model指令来实现表单元素和数据的双向绑定。
    在这里插入图片描述

<div id="app">
    <input type="text" v-model="massage">
    {{massage}}
  </div>
  <script src="../../JS/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        massage:'你好啊'
      }
    })
  </script>
  • v-model其实是一个语法糖,它的背后本质上是包含两个操作:
  • 1.v-bind绑定一个value属性
  • 2.v-on指令给当前元索绑定input事件
<div id="app">
    <!-- v-model等于两个操作的结合 -->
    <!-- input事件可以监听输入 -->
    <input type="text" :value="massage" @input="valueChange">
    {{massage}}
  </div>
  <script src="../../JS/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        massage:'你好啊'
      },
      methods: {
        valueChange(e) {
          // e.target.value是实时输入的数据
          this.massage = e.target.value;
        }
      }
    })
  </script>
<!-- 最简便的写法 -->
    <input type="text" :value="massage" @input="massage = $event.target.value">

$event:手动获取浏览器产生的event对象

②v-model结合radio类型:
<div id="app">
  <label for="male">
    <input type="radio" id="male"  value="" v-model="sex"></label>
  <label for="female">
    <input type="radio" id="female"  value="" v-model="sex"></label>
  <h2>{{sex}}</h2>
  </div>
  <script src="../../JS/vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        massage: "你好啊",
        // 可以通过这里设置默认值
        sex: "女"
      }
    })
  </script>

注意:

  1. 如果这里没有绑定v-model需要在标签里添加相同的name才能保证两个标签互斥。
  2. label 元素不会向用户呈现任何特殊的样式。不过,它为鼠标用户改善了可用性,因为如果用户点击 label 元素内的文本,则会切换到控件本身。
③v-model结合CheckBox:
<div id="app">
    <!-- 1.CheckBox单选框 -->
   <label for="agree">
     <input type="checkbox" name="" id="agree" v-model="isAgree">同意协议
   </label>
   <br>
   <button :disabled="!isAgree">下一步</button>
   <br>
   <!-- 2.CheckBox多选 (结合值绑定)-->
   <label v-for="item in hobbies" :for="item">
    <input type="checkbox" :id="item" :value="item" v-model="myHobbies">{{item}}
   </label>

   <h2>{{myHobbies}}</h2>
  </div>
  <script src="../../JS/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        massage:'你好啊',
        isAgree: false,
        hobbies: ['唱歌','跳舞','篮球','足球','羽毛球'],
        myHobbies: []
      }
    })
  </script>
④v-model结合select:
<div id="app">
   <!-- 选择一个 -->
   <select name="" id="" v-model="fruit">
     <!-- 注意v-model写这里 -->
     <option value="葡萄" >葡萄</option>
     <option value="草莓" >草莓</option>
     <option value="西瓜" >西瓜</option>
     <option value="芒果" >芒果</option>
   </select>
   <h2>您的选择是:{{fruit}}</h2>
   <!-- 选择多个 -->
   <select name="" id="" v-model="fruits" multiple>
     <!-- 注意v-model写这里 -->
     <option value="葡萄" >葡萄</option>
     <option value="草莓" >草莓</option>
     <option value="西瓜" >西瓜</option>
     <option value="芒果" >芒果</option>
    </select>
    <h2>您的选择是:{{fruits}}</h2>
  </div>
  <script src="../../JS/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        massage:'你好啊',
        fruit: '西瓜',
        fruits: []
      }
    })
  </script>
⑤v-model修饰符的使用:
  • lazy修饰符 :

    • 默认情况下, v-model默认是在input事件中同步输入框的数据的。

    • 也就是说, -旦有数据发生改变对应的data中的数据就会自动发生改变。

    • lazy修饰符可以让数据在失去焦点或者回车时才会更新:

    <div id="app">
       <!--1.修饰符: lazy (懒加载) -->
       <!-- 延迟加载 当失去焦点或回车的时候再绑定 -->
       <input type="text" v-model.lazy="massage">
       <h2>{{massage}}</h2>
    </div>
      <script src="../../JS/vue.js"></script>
      <script>
        const app = new Vue({
          el: '#app',
          data: {
            massage:'你好啊',
          }
        })
      </script>
    
  • number修饰符:

    • 默认情况下,在输入框中无论我们输入的是字母还是数字,都会被当做字符串类型进行处理。

    • 但是如果我们希望处理的是数字类型,那么最好直接将内容当做数字处理。

    • number修饰符可以让在输入框中输入的内容自动转成数字类型。

    <div id="app">
       <!-- 2.number -->
       <input type="number" v-model.number="age">
       <!-- 默认情况下v-model在绑定时赋值都是string类型 如果想要保持数字类型 -->
       <h2>{{age}}的类型是{{typeof(age)}}</h2>
      </div>
      <script src="../../JS/vue.js"></script>
      <script>
        const app = new Vue({
          el: '#app',
          data: {
            age: 18
          }
        })
      </script>
    
  • trim修饰符:

    • 如果输入的内容首尾有很多空格,通常我们希望将其去除

    • trim修饰符可以过滤内容左右两边的空格

    <div id="app">
       <!-- 3.trim 自动去除左右两边输入的空格-->
       <input type="text" v-model.trim="name">
       <h2>{{name}}</h2>
      </div>
      <script src="../../JS/vue.js"></script>
      <script>
        const app = new Vue({
          el: '#app',
          data: {
            name: ''
          }
        })
      </script>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值