Vue02

Vue指令补充

复制代码
<!-- 
    v-model.trim 去除文本前后的空格,只保留没有前后空格的文本内容
    v-model.number 将文本中可以转成number的字符串变成字符串
-->
复制代码
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            border: 3px solid black;
            font-size: 30px;
            margin-top: 10px;
        }
        .pink{
            background-color: pink;
        }
        .big{
            width: 300px;
            height: 300px;
        }
    </style>
</head>
<body>
    <div id="app">
    <div class="box" v-bind:class="{pink:true,big:false}" >
        盒子1
    </div>
    <div class="box" v-bind:class="['pink','big']">
        盒子2
    </div>
    </div>
</body>

v-bind导航栏菜单切换

复制代码
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
          margin: 0;
          padding: 0;
        }
        ul {
          display: flex;
          border-bottom: 2px solid #e01222;
          padding: 0 10px;
        }
        li {
          width: 100px;
          height: 50px;
          line-height: 50px;
          list-style: none;
          text-align: center;
        }
        li a {
          display: block;
          text-decoration: none;
          font-weight: bold;
          color: #333333;
        }
        li a.active {
          background-color: #e01222;
          color: #fff;
        }
    </style>
</head>
<body>
    <div id="app">
        <ul>
            <!-- @click单击事件里面可以动态去获取选中的下标 -->
            <!-- 高亮判定条件,当前列表项下标等于选中列表项的下标 -->
            <li v-for="(item,index) in list" :key="item.id" @mouseover="activeIndex=index">
                <a :class="{active:index===activeIndex}" href="">{{item.name}}</a>
            </li>
        </ul>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    const v = new Vue({
        el:"#app",
        data:{
        activeIndex:4,
            list:[
                {id:1,name:"京东秒杀"},
                {id:2,name:"每日特价"},
                {id:3,name:"品类秒杀"}
            ]
        }
    })
</script>

v-bind控制行内样式

v-model作用域其他表单上

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
  <div id="app">
    <h3>个人信息注册</h3>

    姓名:
      <input type="text" v-model="username"> 
      <br><br>
    是否单身:
      <input type="checkbox" v-model="isSingle"> 
      <br><br>

    <!-- 
      前置理解:
        1. name:  给单选框加上 name 属性 可以分组 → 同一组互相会互斥
        2. value: 给单选框加上 value 属性,用于提交给后台的数据
      结合 Vue 使用 → v-model
    -->
    性别: 
      <input v-model="gender" type="radio" name="sex" value="1">男
      <input v-model="gender" type="radio" name="sex" value="2">女
      <br><br>

    <!-- 
      前置理解:
        1. option 需要设置 value 值,提交给后台
        2. select 的 value 值,关联了选中的 option 的 value 值
      结合 Vue 使用 → v-model
    -->
    所在城市:
      <select v-model="cit">
        <option value="bj">北京</option>
        <option value="sh">上海</option>
        <option value="cd">成都</option>
        <option value="nj">南京</option>
      </select>
      <br><br>
    自我描述:
      <textarea v-model="desc"></textarea> 
    <button>立即注册</button>
  </div>
  <script src="js/vue.js"></script>
  <script>
    Vue.config.devtools = true;
    const app = new Vue({
      el: '#app',
      data: {
          username:'',
          isSingle: false,
          gender:1,
          city: '',
          desc:''
      }
    })
  </script>
</body>
</html>
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h3>礼物清单</h3>
        <table>
            <tr>
                <td>名字</td>
                <td>数量</td>
            </tr>
            <tr v-for="(item,index) in list">
                <td>{{item.name}}</td>
                <td>{{item.num}}个</td>
            </tr>
        </table>
        <!-- 目标:统计总和,使用computed统计总数,使用函数名称一定不要带"()" -->
            <p>礼物总数:{{gettotalcount}}</p>
    </div>
</body>

<script src="js/vue.js"></script>
<script>    
    Vue.config.devtools = true;
    const v = new Vue({
        el:"#app",
        data:{
            list:[
                {id:1,name:"篮球",num:1},
                {id:2,name:"玩具",num:2},
                {id:3,name:"铅笔",num:5},
            ]
        },
        computed:{
            gettotalcount(){
                //定义计算逻辑,将list中的num取出进行累加
                return this.list.reduce((sum,item)=>sum + item.num,0)
            }
        }
    })
</script>
</html>

简而言之,methods的函数方法每次调用都会执行一次,computed会使用缓存,一次刷新最多执行一次

复制代码
<body>
  <div id="app">
    姓:<input type="text" v-model="firstName"><br>
    名:<input type="text" v-model="lastName"><br>
    <p>姓名:{{fullName}}</p>
    <button @click="changeName()">修改姓名</button>
  </div>
  <script src="js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName: '',
        lastName:''
      },
      methods:{
        changeName(){
          this.fullName = "张小飞"
        }
      },
      computed: {
          //定义计算属性 获取结果
          /*  fullName(){
            return this.firstName + this.lastName
          }  */
          fullName:{
            get(){
              return this.firstName + this.lastName
            },
            set(value){
                this.firstName = value.slice(0,1);
                this.lastName = value.slice(1);
            }
          }
      }
    })
  </script>
</body>

set方法会在调用=时,将=后面的内容当作value传入

复制代码
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        监听简单的数据:<input type="text" v-model="username">
        监听对象的属性:<input type="text" v-model="user.name">
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    Vue.config.devtools = true;
    const vue = new Vue({
        el:"#app",
        data:{
           username:'eric',
           user:{name:'kobe'}
        },
        watch:{
            //监听简单的数据
            username(newValue,oldValue){
                console.log('新值:',newValue,'旧值:',oldValue)
            },
            //监听对象的属性
            'user.name'(n1,n2){
                console.log('新值:',n1,'旧值:',n2)
            }
        }
    })
</script>
</html>
复制代码
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        监听简单的数据:<input type="text" v-model="username">
        监听对象的属性:<input type="text" v-model="user.name">
        深度监听:<input type="text" v-model="emp.empname">
        <input type="text" v-model="emp.address">
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    Vue.config.devtools = true;
    const vue = new Vue({
        el:"#app",
        data:{
           username:'eric',
           user:{name:'kobe'},
           emp:{
            empname:"jass",address:"USA"
           }
        },
        computed:{
            newEmp(){
                return JSON.stringify(this.emp);
            }
        },
        watch:{
            //监听简单的数据
            username(newValue,oldValue){
                console.log('新值:',newValue,'旧值:',oldValue)
            },
            //监听对象的属性
            'user.name'(n1,n2){
                console.log('新值:',n1,'旧值:',n2)
            },
            //深度监听
            "newEmp":{
                handler(nv,ov){//nv:属性值发生变化的对象 ov:原来的值对应的对象
                    console.log("新:", JSON.stringify(nv),"旧:",JSON.stringify(ov));
                },            
                deep:true,  //开启深度监听
                immediate:true,   //开启立即监听
            }
        }
    })
</script>
</html>
相关推荐
代码中介商2 小时前
C++11右值引用与移动语义深度解析
开发语言·c++
码上有光2 小时前
c++:二叉搜索树(map和set的底层结构)
开发语言·c++·递归·二叉搜索树
AsiaLYF2 小时前
Kotlin MutableSharedFlow: emit vs tryEmit 详解
开发语言·前端·kotlin
喜欢踢足球的老罗2 小时前
Chrome MV3 插件架构深度解析:Service Worker 生命周期与 Token 管理的三层博弈
前端·chrome·架构
buxiangshui_cd2 小时前
Conda命令
开发语言·python·conda
踏着七彩祥云的小丑2 小时前
Go学习第2天:程序结构+基础语法+数据类型
开发语言·学习·golang·go
小李云雾2 小时前
Pinia:Vue3 全局状态管理从入门到精通
前端·javascript·vue.js
隔窗听雨眠2 小时前
VMware迁移上云的十个关键关卡
开发语言·php·vmware
caimouse2 小时前
Reactos 第 5 章 进程与线程 — 5.4 系统调用 NtCreateThread()
服务器·开发语言