如何快速上手Vue框架?(中)

简介: 如何快速上手Vue框架?(中)

6.3 v-else

用法:

true不显示,false显示

注意:

不能单独使用,必须要和v-if搭配

v-if和v-else中间不能有多余标签

案例:演出实现二者搭配的效果

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #divs {
            border: 1px solid red;
            width: 100px;
            height: 150px;
        }
    </style>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <div v-if=flag id="divs">这是加了v-if渲染的div</div>
    <div v-else=flag >这是加了v-else渲染的div</div>
    <input type="button" value="按钮" @click="changeDiv">
</div>
<script>
    new Vue({
      el:"#app",
      data:{
          flag:true
      },
      methods:{
          changeDiv:function () {
              //按下按钮触发单击事件的瞬间,flag被取反并同时作用于所渲染的标签体
              this.flag=!this.flag;
          }
      }
    })
</script>
</body>
</html>

案例演示效果:

①变化前

②变化后

6.4 v-show

用法:

根据表达式的值来决定是否显示元素或组件,当表达式的值为真时会显示,否则会隐藏,但是元素仍然会被渲染到 DOM 中。

案例:演示实现v-show的效果

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #divs {
            border: 1px solid red;
            width: 100px;
            height: 150px;
        }
    </style>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
<!--    <div v-if=flag id="divs">这是加了v-if渲染的div</div>-->
    <div v-show=flag id="divs">这是加了v-show渲染的div</div>
    <input type="button" value="按钮" @click="changeDiv">
</div>
<script>
    new Vue({
      el:"#app",
      data:{
          flag:true
      },
      methods:{
          changeDiv:function () {
            //按下按钮触发单击事件的瞬间,flag被取反并同时作用于所渲染的标签体
              this.flag=!this.flag;
          }
      }
    })
</script>
</body>
</html>

案例实现效果:

①渲染前

②渲染后

6.5 v-if 与v-show的区别

使用场景不同

v-if 适用于在条件满足时只渲染一次的情况。

v-show 适用于需要频繁切换显示与隐藏的情况。

why?

因为 v-if 在条件不满足时会从 DOM 中删除元素,而 v-show 则只是通过修改 CSS 样式来隐藏元素,因此 v-show 的性能比 v-if 更好。


七. Vue如何实现列表渲染?

用法:

Vue 的列表渲染可以使用 v-for 指令,它可以遍历数组或对象,并将每个元素渲染出来。

位置:

循环遍历哪个标签,v-for加在哪个标签上

语法:

v-for=" "

7.1 简单数组

案例:在hyml中的无序列表中遍历数据模型中的hobbys并显示在页面中

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <ul>
        <li v-for="hobby in hobbys">{{hobby}}</li>
    </ul>
    <input type="button" value="新增" @click="addHobby">
    <input type="button" value="删除" @click="deleteHobby">
</div>
<script>
    new Vue({
        el:"#app",
        data: {
            hobbys:["Java","mysql","写博客","刷视频号"]
        } ,
        methods:{
            //新增一个习惯
            addHobby:function () {
                this.hobbys.push("CODM")
            },
            //删除一个习惯,从后往前删
            deleteHobby:function () {
                this.hobbys.splice(this.hobbys.length-1,1)
            }
        }
    })
</script>
</body>
</html>

7.2 对象数值

案例:在table标签中将数据模型中的computers对象数组遍历并显示到页面

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <table>
        <tr>
            <th>序号</th>
            <th>品牌</th>
            <th>价格</th>
        </tr>
        <tr v-for="computer in computers">
            <td >{{computer.id}}</td>
            <td >{{computer.brand}}</td>
            <td >{{computer.price}}</td>
        </tr>
    </table>
</div>
<script>
    new Vue({
        el:"#app",
        //遍历对象数值
        data: {
            computers:[
                {
                  id:1001,
                  brand:"华为",
                  price: 7800
                }, {
                  id:1002,
                  brand:"联想" ,
                  price:8900
                }, {
                  id:1003,
                  brand:"苹果",
                  price:13000
                }
            ]
        } 
    })
</script>
</body>
</html>

需要索引的语法:

v-for=“(变量,index) in 数组”

索引index从0开始,可以加数学运算

案例:在刚才的对象数组中加入序号

代码演示如下:

</head>
<body>
<div id="app">
    <table>
        <tr>
            <th>索引</th>
            <th>序号</th>
            <th>品牌</th>
            <th>价格</th>
        </tr>
        <tr v-for="(computer,index) in computers">
            <td>{{index+1}}</td>
            <td >{{computer.id}}</td>
            <td >{{computer.brand}}</td>
            <td >{{computer.price}}</td>
        </tr>
    </table>
</div>
<script>
    new Vue({
        el:"#app",
        //遍历对象数值
        data: {
            computers:[
                {
                  id:1001,
                  brand:"华为",
                  price: 7800
                }, {
                  id:1002,
                  brand:"联想" ,
                  price:8900
                }, {
                  id:1003,
                  brand:"苹果",
                  price:13000
                }
            ]
        }
    })
</script>
</body>
</html>


八. Vue如何实现事件驱动?

语法:

v-on:事件类型=“函数调用”

案例:实现单击事件和change事件

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <!--  单击事件  -->
    <input type="button" value="按钮" v-on:click="clickTest(10,'java')"><br>
    <!--  change事件  -->
    <input type="text" v-on:change="changeTest">
</div>
<script>
    new Vue(
        {
        el:"#app",
        data:{},
        methods:{
                clickTest:function (a,b) {
                    alert("这是vue绑定并测试的单击事件")
                    alert("传入的值:"+a+"\t"+b)
                },
                changeTest:function () {
                    alert("这是vue绑定并测试的change事件")
                }
            }
        }
    )
</script>
</body>
</html>

注意:

上述事件驱动的语法可这样简写:

v-on:click=“clickTest” ==> @click="clickTest"

下面的methods里的自定义函数可这样简写(不常用):

clickTest:function (a,b) {
                    alert("这是vue绑定并测试的单击事件")
                    alert("传入的值:"+a+"\t"+b)
                }
clickTest(){
  alert("点击事件绑定成功")
}

九. Vue如何实现取消控件默认行为?

9.1 什么是控件默认行为?

控件的默认行为指的是:

  • 点击超链接跳转页面
  • 点击表单提交按钮提交表单

9.2 超链接与表单取消控件默认行为

语法

js:event.preventDefault(); //取消控件的默认行为

Vue:@click.prevent=“clickTest” //100%取消

案例:模拟实现超链接与表单取消控件默认行为

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    <a href="https://www.baidu.com/" @click="clickTest">跳转至百度</a>
    <form  action="helloworld.html" method="get" @submit.prevent="submitTest" >
        <input type="text" name="username">
        <input type="submit" >
    </form>
</div>
<script>
    new Vue({
        el:"#app",
        data:{},
        methods:{
            clickTest:function () {
                //如果你不根让超链接进行跳转
                alert("将要跳转至百度")
                //取消控件的默认行为
                event.preventDefault();
            },
            submitTest:function () {
                //如果你不根让超链接进行跳转
                alert("将要提交表单")
                //取消控件的默认行为
                // event.preventDefault();
            }
        }
    })
</script>
</body>
</html>


十. Vue如何实现阻止事件冒泡?

10.1 关于事件修饰符

Vue事件修饰符是Vue提供的一种语法糖,用于简化事件处理程序的编写。事件修饰符是在事件后面添加的特殊后缀,用于改变事件的行为。

常见的事件修饰符有以下几种:

  • .stop阻止事件冒泡
  • .prevent阻止默认事件
  • .capture事件捕获阶段触发事件处理程序
  • .self只有在事件的目标元素上触发事件才会触发事件处理程序
  • .once只触发一次事件处理程序
  • .passive告诉浏览器不需要阻止默认事件,以提高性能

10.2 什么是事件冒泡?

指在 HTML 元素嵌套的结构中,当一个事件被触发时,它会从最内层的元素开始,逐层向外传递,直到传递到最外层的元素为止。在这个过程中,如果某个元素绑定了事件处理函数,它就会被调用执行。

例如,当用户在一个按钮上点击鼠标时,click 事件就会被触发,并且会从按钮元素开始沿着层次结构向外传递,直到传递到整个文档的最外层。在传递的过程中,任何绑定了 click 事件的元素都会被调用执行相应的事件处理函数。

10.3 如何实现阻止事件冒泡

语法:

js:event.stopPropagation(); //阻止事件冒泡
vue:@click.stop="div2Test"

案例:模拟实现阻止事件冒泡

代码演示如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="vue.js"></script>
    <style>
        #div1{
            border: 2px solid red;
            width: 300px;
            height: 300px;
        }
        #div2{
            border: 2px solid blue;
            width: 150px;
            height: 150px;
        }
    </style>
</head>
<body>
<div id="app">
    <div id="div1" @click="div1Test">
        <div id="div2" @click.stop="div2Test"></div>
    </div>
</div>
<script>
    new Vue({
        el:"#app",
        data:{},
        methods:{
            div1Test:function () {
                alert("点击了大红框");
            },
            div2Test:function () {
                //发生了事件冒泡:即点中了小蓝框,小蓝框的单击事件于大红框的单击事件先后触发
                alert("点击了小蓝框");
                //现有需求:点击小蓝框,只触发小蓝框的单击事件
                //js的原生阻止方法
                // event.stopPropagation();
            }
        }
    })
</script>
</body>
</html>

相关文章
|
1天前
|
JavaScript
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
这篇文章详细介绍了Vue路由中的query参数、命名路由、params参数以及props配置的使用方式,并通过实际项目案例展示了它们在开发中的应用和测试结果,同时解释了`<router-link>`的`replace`属性如何影响浏览器历史记录。
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
|
1天前
|
JavaScript
Vue学习之--------VueX(2022/8/31)
这篇文章是关于VueX的基础知识介绍,涵盖了VueX中的state、mutations、getters和actions的定义和使用,以及Action提交mutation而非直接变更状态,以及mutations的同步执行特性。
Vue学习之--------VueX(2022/8/31)
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
这篇文章通过一个实际的Vue项目案例,演示了如何在Vuex中实现多组件间共享数据。文章内容包括在Vuex的state中新增用户数组,创建Person.vue组件用于展示和添加用户信息,以及在Count组件中使用Person组件操作的数据。通过测试效果展示了组件间数据共享和状态更新的流程。
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)
这篇文章详细介绍了Vuex的模块化编码和命名空间的使用,旨在让代码更易于维护并提高数据分类的明确性。内容包括模块化和命名空间的概念、如何在store中配置模块、以及如何在组件中使用模块化的数据。文章通过实战项目案例,展示了如何拆分`store/index.js`文件,创建`count.js`和`person.js`模块,并在`Count.vue`和`Person.vue`组件中使用这些模块。最后,文章还提供了测试效果和一些使用注意点。
Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)
|
1天前
|
存储 JavaScript 前端开发
Vue学习之--------路由(Router)的基本使用(1)(2022/9/5)
这篇文章是关于Vue-router路由的基本使用教程,涵盖了安装配置、应用插件、编写路由规则、实现页面跳转和高亮显示,以及一些使用中的注意点和项目实际应用案例。
Vue学习之--------路由(Router)的基本使用(1)(2022/9/5)
|
1天前
|
缓存 JavaScript
Vue学习之--------多级路由的使用(2)(2022/9/5)
这篇文章介绍了在Vue中实现多级路由缓存的方法,包括在路由配置中添加meta属性以启用缓存,使用keep-alive组件包裹需要缓存的视图,以及在Vuex中管理缓存视图列表的逻辑。
Vue学习之--------多级路由的使用(2)(2022/9/5)
|
1天前
|
JavaScript 前端开发 开发者
Vue学习之--------深入理解Vuex、原理详解、实战应用(2022/9/1)
这篇文章详细介绍了Vuex的基本概念、使用场景、安装配置、基本用法、实际应用案例以及注意事项,通过一个数字累加器的实战示例,帮助开发者深入理解Vuex的原理和应用。
|
1天前
|
存储 JavaScript API
vue后台管理权限码处理
【8月更文挑战第19天】vue后台管理权限码处理
8 0
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之getters、mapState、mapGetters(2022/9/3)
这篇文章深入探讨了Vuex中的getters概念和用法,以及如何通过mapState、mapGetters、mapActions和mapMutations四个辅助函数简化组件中的Vuex状态访问和操作,通过实际项目案例展示了这些概念的应用和效果。
|
1天前
|
JavaScript
vue知识点
vue知识点
6 1