Vue(4)

day84 Vue (4)

1 按键修饰符

1. @keyup="函数名"
# 在键盘按的按键可以展示出来

2. @keyup.enter="函数名"
# 按下回车键时会触发相关操作


3. <button @click="handelClick">点我</button>

methods: {
          handelClick(ev) {
          // 可以看见上述3中的调用函数时并没有传参数,这里却可以接收到参数
              console.log(ev)
          }
      }

<div id="app">
  <input type="text" v-model="name" @keyup="handelKey1">
  <input type="text" v-model="name" @keyup.enter="handelKey2">
  <!--   <button @click="handelClick">点我</button>-->
</div>

<script>
  var vm = new Vue({
      el: '#app',
      data: {
          name: ''
      },
      methods: {
          handelKey1(ev) {
              console.log(ev)
              if (ev.keyCode == 13) {
                  console.log('按下了回车')
              }
          },
          handelKey2() {
              console.log('回车键按下了')
          },
          handelClick(ev) {
              console.log(ev)
          }
      }

  })
</script>

2 表单控制

  • checkbox

  • radio

    <div>
      <input type="checkbox" v-model="checks" value="1">篮球
      <input type="checkbox" v-model="checks" value="2">足球
      <input type="checkbox" v-model="checks" value="3">网球

      <p>当前选择为:{{checks}}</p>
  </div>
   
      <div>
      <h1>radio按钮</h1>
      <p>选择性别</p>
      <p><input type="radio" v-model="gender" value="1">男</p>
      <p><input type="radio" v-model="gender" value="2">女</p>
      <p><input type="radio" v-model="gender" value="3">保密</p>
      <p>当前选择为:{{gender}}</p>
  </div>
   
  <script>
  let vu = new Vue({
      el: '#app',
      data: {
          // checks:'',    
          checks:[],
          gender: '' // 单选框这里使用数组结果也是一样的
      },
      methods: {},
  })
</script>

# 比较有意思的是,当checks 为字符串时,显示的结果为布尔值;选择方式会随着值的类型的变化而变化。

3 购物车案例

  • 3.1 简易版本
<style>
  tr,th,td{
      border:1px red solid ;
  }
</style>
<body>
<div id="app">
  <h1>购物车版本一</h1>
<div>
<table>
  <tr>
      <th>商品名称</th>
      <th>商品价格</th>
      <th>商品数量</th>
      <th>加入购物车</th>
  </tr>
  <tr v-for="good in shopping">
      <td>{{good.name}}</td>
      <td>{{good.price}}</td>
      <td>{{good.number}}</td>
      <!-- 再绑定一个事件,实时展示商品总价-->
<!--       <td><input type="checkbox" v-model="checks" :value="good" @change="shopChange(good)"></td>-->
      <td><input type="checkbox" v-model="checks" :value="good" ></td>
  </tr>
  <tr>
      <td>商品总价:</td>
      <td>{{getprice()}}</td>
  </tr>
</table>
</div>
</div>
</body>


<script>
  let vu = new Vue({
      el: '#app',
      data: {
          shopping: [{name: '三体', price: 10, number: 2},
              {name: '诗经', price: 10, number: 2},
              {name: '氓', price: 10, number: 2},],
          // total_price:0,
          checks:[],
      },
      methods: {
          // shopChange(obj){
          //
          //     // console.log(obj)
          //     this.total_price +=obj.price*obj.number
          // }
          getprice(){
              let total_price = 0;
              if(this.checks.length >=1){
                  for(i in this.checks){
                      total_price += this.checks[i].price * this.checks[i].number
                  }
              }
              // return this.total_price
              return total_price
          }
      },
  })
</script>
  • 3.2 增加全选功能
<style>
   tr,th,td{
       border:1px red solid ;
  }
</style>
<body>
<div id="app">
   <h1>购物车版本一</h1>
<div>
<table>
   <tr>
       <th>商品名称</th>
       <th>商品价格</th>
       <th>商品数量</th>
       <th>加入购物车/全选<input type="checkbox" v-model="checkall" @change="handlerCheckAll"></th>
   </tr>
   <tr v-for="good in shopping">
       <td>{{good.name}}</td>
       <td>{{good.price}}</td>
       <td>{{good.number}}</td>
       <!-- 再绑定一个事件,实时展示商品总价-->
<!--       <td><input type="checkbox" v-model="checks" :value="good" @change="shopChange(good)"></td>-->
       <td><input type="checkbox" v-model="check" :value="good" @change="handlerCheckOne"></td>
   </tr>
   <tr>
       <td>商品总价:</td>
       <td>{{getprice()}}</td>
   </tr>
</table>
</div>
</div>
</body>

<script>
   let vu = new Vue({
       el: '#app',
       data: {
           shopping: [{name: '三体', price: 10, number: 2},
              {name: '诗经', price: 10, number: 2},
              {name: '氓', price: 10, number: 2},],
           // total_price:0,
           check:[],
           checkall:false,
      },
       methods: {
           getprice(){
               let total_price = 0;
               if(this.check.length >=1){
                   for(i in this.check){
                       total_price += this.check[i].price * this.check[i].number
                  }
              }
               // return this.total_price
               return total_price
          },
           handlerCheckAll(){
               if(this.checkall === true){
                   // alert(123)
                   this.check = this.shopping
              }else{
                   // alert(123)
                   this.check = []
              }
          },
           handlerCheckOne(){
               if(this.check.length !== 3){
                   // alert(123)
                   this.checkall = false
              }else{
                   this.checkall = true
              }
          },
      },
  })
</script>

</html>

  • 3.3 增加数量修改的按钮
<style>
   tr,th,td{
       border:1px red solid ;
       text-align: center;
  }
</style>
<body>
<div id="app">
   <h1>购物车版本二</h1>
<div>
<table>
   <tr>
       <th>商品名称</th>
       <th>商品价格</th>
       <th>商品数量</th>
       <th>加入购物车/全选<input type="checkbox" v-model="checkall" @change="handlerCheckAll"></th>
   </tr>
   <tr v-for="good in shopping">
       <td>{{good.name}}</td>
       <td>{{good.price}}</td>
       <td>
           <button @click="handlerDecreaseNumber(good)">-</button>
          {{good.number}}
           <button @click="good.number++">+</button>
       </td>
       <!-- 再绑定一个事件,实时展示商品总价-->
<!--       <td><input type="checkbox" v-model="checks" :value="good" @change="shopChange(good)"></td>-->
       <td><input type="checkbox" v-model="check" :value="good" @change="handlerCheckOne"></td>
   </tr>
   <tr>
       <td>商品总价:</td>
       <td>{{getprice()}}</td>
   </tr>
</table>
</div>
</div>
</body>

<script>
   let vu = new Vue({
       el: '#app',
       data: {
           shopping: [{name: '三体', price: 10, number: 2},
              {name: '诗经', price: 10, number: 2},
              {name: '氓', price: 10, number: 2},],
           // total_price:0,
           check:[],
           checkall:false,
      },
       methods: {
           // shopChange(obj){
           //
           //     // console.log(obj)
           //     this.total_price +=obj.price*obj.number
           // }
           getprice(){
               let total_price = 0;
               if(this.check.length >=1){
                   for(i in this.check){
                       total_price += this.check[i].price * this.check[i].number
                  }
              }
               // return this.total_price
               return total_price
          },
           handlerCheckAll(){
               if(this.checkall === true){
                   // alert(123)
                   this.check = this.shopping
              }else{
                   // alert(123)
                   this.check = []
              }
          },
           handlerCheckOne(){
               if(this.check.length !== 3){
                   // alert(123)
                   this.checkall = false
              }else{
                   this.checkall = true
              }
          },
           handlerDecreaseNumber(obj){
               if(obj.number ===1){
                   obj.number =1
              }else{
                   obj.number--
              }
          },
      },
  })
</script>

</html>

4 v-model进阶

lazy:等待input框的数据绑定时区焦点之后再变化
number:数字开头,只保留数字,后面的字母不保留;字母开头,都保留
trim:去除首和末尾的空格

5 Vue生命周期钩子

# 开局一张图,内容全靠百度
。。。。。。

小练习

1 vue+bootstrap+drf,查询所有图书,使用表格显示,带排序,带过滤功能

2 购物车案例,敲出来
# 以上
2 有时间:实现一下找回密码功能
-发送邮件,isdangeours模块

 使用pthon发送邮箱参考:
    https://www.cnblogs.com/liuqingzheng/articles/10072695.html

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
</head>
<body>

<div id="app">
    <button @click="handle">点我</button>
    {[name]}
</div>
</body>
<script>
    var vm=new Vue({
        delimiters:['{[', ']}'], //加入这句,把vue的插值语法替换为 {[]},否则会跟django模板语法冲突
        el:'#app',
        data:{
            name:'lqz'
        },
        methods:{
            handle(){
                let _this=this
                $.ajax({
                    url:'/home/',
                    method:'get',
                    success:function (data) {
                        _this.name=data
                    }
                })
            }
        }
    })

</script>
</html>

 

posted @ 2021-07-14 18:58  代码歌  阅读(52)  评论(0)    收藏  举报