VUE(2)今日内容{插值语法、事件、属性、隐藏和显示、for循环}

插值语法: {{}}

  在html中书写, 主要出现在 双标签的内容区域, {{ JS代码... }}

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- DOM的痛点: 
      查询代码复杂 + 选择器书写繁琐 且 需要理清DOM元素之间的关系 -->

    <div id="app">
      <!-- 
        {{}}: 叫做 插值语法, Vue规定的格式, 类似于模板字符串的${} -->
      <h2>{{title}}</h2>
      <div>
        <div>
          <div>msg: {{msg}}</div>
          <div>{{word}}</div>
          <div>{{name}}</div>
          <div>{{skill}}</div>
        </div>
      </div>
    </div>

    <!-- vue.js 是开发版, 代码有错误 会在后台出现提示 -->
    <!-- vue.min.js 是生产版, 没有错误提示, 体积小, 适合上线时使用 -->
    <script src="./vendor/vue.js"></script>
    <script>
      // new Vue(): 创建Vue实例对象, Vue来自于 上方引入的脚本
      new Vue({
        // 对象类型中, 是vue相关配置项 -- 都是固定的名称
        // el: element元素;  值是选择器; 代表当前vue要管理哪个元素
        el: "#app",
        // data: 数据.  用途:凡是显示在页面上的数据 都放在此属性中
        /* Vue底层会自动搜索 el 指定元素中, 
           标签内容是{{}} 的. 就认为是Vue应该处理的变量, 进行对应的替换操作*/
        data: {
          title: "Hello Vue!",
          msg: "这是第一个vue代码",
          word: "Nice To meet you!",
          name: "亮亮",
          skill: "什么都没讲",
        },
      })
    </script>
  </body>
</html>

事件:

  • 旧写法, 由于复杂基本上不用: <el v-on:事件名="">

  • 新写法, 简单易用: <el @事件名=""/>

  • 默认参数: <el @click="函数" /> 注意函数不加()结尾

    • 默认会把 事件本身作为参数传入到函数中

  • 自定义参数: <el @click="函数(参数, 参数..., $event)"

    • 使用关键词 $event 来代表事件参数

事件:①

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <div>{{msg}}</div>
      <!-- 原生语法: onclick -->
      <!-- 为了与原生区分, 使用 @ 代替 on -->
      <button @click="show1">点我1</button>
      <!-- 旧写法, 已淘汰. v-on:click -->
      <button v-on:click="show1">点我2</button>
    </div>

    <script src="./vendor/vue.js"></script>
    <script>
      //语法糖介绍:
      let a = {
        // 最完整写法
        desc: function desc() {},
        //可以省略 function 关键词, 因为太长了
        desc1() {},
      }
      console.log(a)
      // 声明vue 管理 id='app' 的元素, 增加data. msg: 666
      var vm = new Vue({
        el: "#app",
        data: {
          msg: 666,
        },
        // methods(方法): 官方规定, 此属性中写 函数, 可以全局到处使用
        methods: {
          // 相当于:  show1: function(){}
          show1() {
            alert(1111)
            // 为 msg 变量 +1
            // this的指向: 普通函数的this指向运行时所在对象
            /* 此处: 要查看真正生成的 vue 对象结构,
               msg就是存储在vue对象中的.  所以采用 this.msg 来读取*/
            this.msg++
          },
        },
      })
      console.log(vm) //查看vue对象的样子
    </script>
  </body>
</html>

事件参数:②

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <p>选择你最喜欢的英雄: <b>{{hero}}</b></p>
      <button @click="doChoose">托儿索</button>
      <button @click="doChoose">儿童劫</button>
      <button @click="doChoose">小学僧</button>
      <button @click="doChoose">人头狗</button>
    </div>
    <script src="./vendor/vue.js"></script>
    <script>
      // 创建 vue 对象, 管理 id='app' 元素,  hero默认值: '待定'
      new Vue({
        el: "#app",
        data: { hero: "待定" },
        methods: {
          // 参数名随意: 这叫形参, 习惯上是 e 或 event
          doChoose(event) {
            // 事件触发时, 默认带有参数: 事件本身的相关内容
            console.log(event)
            // target 就是触发当前事件的 DOM 元素
            let name = event.target.innerHTML
            this.hero = name // 把按钮上的名称 赋值给 hero 变量
          },
        },
      })
    </script>
  </body>
</html>

事件自定义参数:③

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <p>数量: {{count}}</p>
      <!-- 注意: 默认写法 @click="changeCount" 此时事件本身会作为参数传递进入 -->
      <!-- 如果 自定义的传参, 官方提供了关键词: $event, 用来代表事件参数 -->
      <!-- Vue本身就对DOM进行了封装, 提倡的是 代码本身 0 DOM -->
      <!-- 所以传参的方式更加推荐, 不推荐使用DOM属性! -->
      <button data-delta="+1" @click="changeCount(+1, $event)">数量加1</button>
      <button data-delta="-1" @click="changeCount(-1, $event)">数量减1</button>
    </div>

    <script src="./vendor/vue.min.js"></script>
    <script>
      new Vue({
        el: "#app",
        // 此处是数字类型
        data: { count: 10 },
        methods: {
          // delta: 值是 -1 或 +1
          changeCount(delta, e) {
            console.log(e)
            this.count = this.count + delta
          },
        },
      })
    </script>
  </body>
</html>

属性

属性的绑定

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <!-- {{}} 主要是双标签的内容 使用 -->
      <p>{{imgs[0]}}</p>
      <!-- 属性用特殊写法:  -->
      <!-- 旧写法, 基本不用 -->
      <img v-bind:src="imgs[0]" />
      <!-- 新写法:  :属性名="JS代码" -->
      <img :src="imgs[current]" />

      <button @click="goNext">下一张</button>
    </div>
    <script src="./vendor/vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: {
          imgs: ["./img/1.jpg", "./img/2.jpg", "./img/3.jpg", "./img/4.jpg"],
          current: 0, //当前序号
        },
        methods: {
          goNext() {
            this.current++
            // 取余: 4 %4 == 0,  超过最大序号 自然回到0
            // this.current %= 4
            // 用图片的个数作为 取余, 可以更加灵活.
            // 这样图片数组有变化, 此处的余数自然就会变化
            this.current %= this.imgs.length
          },
        },
      })
    </script>
  </body>
</html>

隐藏和显示

①:v-show:

值是true则显示, 值是false 则隐藏本质是利用 css 的display:none 实现隐藏

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <!-- css 隐藏元素: 通过 display -->
      <p style="display: none">这是一段消息</p>
      <!-- show: 显示,呈现 -->
      <p v-show="show">这是一段消息</p>
      <button @click="doShow">显示</button>
      <button @click="doHide">隐藏</button>
    </div>

    <script src="./vendor/vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        // show: 代表是否要显示
        data: { show: true },
        methods: {
          doShow() {
            this.show = true
          },
          doHide() {
            this.show = false
          },
        },
      })
    </script>
  </body>
</html>

②:v-if, v-else, v-else-if:

条件真则添加DOM元素, 添加假则移除DOM元素

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- v-if: 条件为真, 加载元素; 条件为假, 删除元素 -->
      <!-- v-if 利用删除或添加DOM元素实现隐藏/显示. -->
      <!-- v-show性能高,推荐;  v-if要删DOM,性能低,不推荐 -->
    <!-- if...else... -->
    <div id="app">
      <p>张三的面试分数: {{score}}</p>
      <!-- v-show: true显示 false隐藏 -->
      <button @click="changeScore(-10)" v-show="score>0">-10</button>
      <button @click="changeScore(+10)" v-show="score<100">+10</button>
      <!-- if ... else ...: 满足条件显示xxx 否则显示xxx -->
      <p v-if="score>=60">及格</p>
      <p v-else>不及格</p>
    </div>
    <script src="./vendor/vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: { score: 60 },
        methods: {
          changeScore(delta) {
            this.score += delta
          },
        },
      })
    </script>
  </body>
</html>

/*********************************分*割*线********************************************/


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- if...elseif...elseif...else... -->
    <div id="app">
      <p>小亮的考试分数: {{score}}</p>
      <button @click="changeScore(-10)" :disabled="score==0">-10</button>
      <button @click="changeScore(+10)" :disabled="score==100">+10</button>
      <!-- 不同的条件 加载不同的DOM元素 -->
      <p v-if="score==100">Perfect!</p>
      <p v-else-if="score>=90">优秀</p>
      <p v-else-if="score>=80">良好</p>
      <p v-else-if="score>=60">及格</p>
      <p v-else>不及格</p>
    </div>
    <script src="./vendor/vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: { score: 60 },
        methods: {
          changeScore(delta) {
            this.score += delta
          },
        },
      })
    </script>
  </body>
</html>

for循环

ofin 关键词 效果一样, 没任何区别, 挑喜欢的

  • <el v-for="item of 数组/对象"

  • 带有序号: <el v-for="(item,index) in 数组/对象"

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <ul>
        <!-- 回顾遍历数组:  for (let item of names) { } -->
        <!-- 写在哪个元素上, 就可以遍历生成此元素 -->
        <!-- of 写成in  效果相同 -->
        <li v-for="item of names">{{item}}</li>
        <!-- 练习: -->
        <div v-for="abc of names">{{abc}}</div>
        <p v-for="x in names">{{x}}</p>
        <h4></h4>
      </ul>
    </div>
    <script src="./vendor/vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: {
          names: ["欧豪", "小名", "暗暗", "尼古拉是"],
        },
      })
    </script>
  </body>
</html>
/*******************分隔线************************/
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <ul>
        <!-- 可以写 (item,index) 就代表 元素 和 序号 -->
        <li v-for="(item,index) in names">
          <b>{{index}}</b>
          <span>.{{item}}</span>
        </li>
        <!-- 遍历对象: in 和 of 效果一致; 挑你喜欢的 -->
        <li v-for="(item,index) of emp">
          <b>{{index}}</b>
          <span>{{item}}</span>
        </li>
      </ul>
    </div>
    <script src="./vendor/vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: {
          names: ["欧豪", "小名", "暗暗", "尼古拉是","张三"],
          emp: { name: "尼古拉是", age: 44, phone: "18799887788" },
        },
      })
    </script>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值