Vue学习之路(基础篇)

简介: Vue学习之路(基础篇)

Vue学习之路(基础篇)

一. Vue 引言


image.png

渐进式 JavaScript 框架 --摘自官网


# 渐进式
   1. 易用  html css javascript上手比较容易
   2. 高效  开发前端页面 非常高效 
   3. 灵活  开发灵活 多样性
   4. 渐进式:
       a.易用 vue.js 上手非常快
       b.灵活 vue生态系统非常强大 vue基础核心 vue组件 
       c.高效 vue体积小 20kb 超快虚拟dom(网页形成dom树)
              vue底层深度优化
# 总结
    Vue 是一个渐进式javascript 框架 js 简化页面js操作
    JQuery也是一个js框架,简化js开发
    bootstrap 是一个css框架  封装css
# 后端服务端开发人员: 
    Vue 渐进式javascript框架: 让我们通过操作很少的DOM,
    甚至不需要操作页面中任何DOM元素,就很容易的完成数据和视图绑定 ====> 双向绑定 MVVM  
# Vue 作者
   尤雨溪   国内的    
   独立开源开发者(自由职业者)
   现全职开发和维护vue.js
   2014年开发vue2.0目前最火

1.1 vue的优势

 通俗定义:
 1.vue的出现可以让我们在页面中完成复杂操作,可以简化
    dom编程甚至不写任何的dom编程代码
 2.vue内置双向绑定机制  MVVM机制---前后端分离
 html+js-->html+css+JQuery-->vue(前后端分离)-->前端系统+json(ajax)+后端系统

二. Vue入门

2.1 下载Vuejs

//开发版本:
  <!-- 开发环境版本,包含了有帮助的命令行警告 -->
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
//生产版本:
  <!-- 生产环境版本,优化了尺寸和速度 -->
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>

2.2 Vue第一个入门应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>first vue page</title>
</head>
<!--1、在script中引入vue代码-->
<script src="js/vue-min.js"></script>
<body>
<div id="app">
    <h1>first page</h1>
    <h1>获取vue中的数据:{{message}}}</h1>
    <h1>count的运算值:{{count+3+2+5}}</h1>
    <h1>name的值的长度:{{name.length}}</h1>
    <h2>username的值大写:{{name.toUpperCase()}}</h2>
    <h2>username的值是否为wanghj:{{username== 'wanghj'}}</h2>
</div>
</body>
</html>
<!--2. 准备script标签中书写vue代码-->
<script type="text/javascript">
    //vue代码 {id:"liuh"}
    //创建vue实例(对象)
    new Vue({
        el: "#app",  //element 简写 指定vue实例作用范围
        data: {  //用于给vue实例绑定数据
            message: "hello vue!",
            count:0,
            name:"王恒杰",
            username:"wanghj"
        }
    })
</script>

注意:

1、一张html页面只能定义一个vue实例<br /><br />2、el属性指定vue实例的作用范围,vue只能在实例范围内才会生效


3、data属性是在为vue实例绑定一些数据,可以通过{{data中的属性的名字}},获取对应属性值


4、vue实例中el属性可以书写任何css选择器,但是推荐id选择器<br /> 因为一个vue实例只能作用于一个具体的作用范围


image.png


2.3 Vue中的复杂数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue中data属性定义数组,对象类型数据以及获取</title>
</head>
<body>
<div id="app">
    <!--  零散数据-->
    <h1>基本数据:{{message}}</h1>
    <hr/>
    <!--  对象-->
    <h1>对象数据类型:{{user}}}</h1>
    <h1>对象类型的数据的值:{{user.id}}---{{user.name}}---{{user.age}}</h1>
    <hr/>
    <!--  数组-->
    <h1>数组类型数据:{{names}}</h1>
    <h1>数组第一个值:{{names[0]}}</h1>
    <h1>数组中第二个对象的姓名:{{users[0].name}}</h1>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    new Vue({
        el: "#app",  //指定vue实例
        data: {   //为实例创建数据
            message: "hello whj",
            //对象类型的数据
            user:{id:1,name:"王恒杰",age:18},
            //定义数组类型数据
            names:["wanghj","yangfj","dengzw","wangcy"],
        //    定义对象类型的数组
            users:[
                {id:1,name:"王恒杰",age:18},
                {id:2,name:"杨福君",age:19},
                {id:3,name:"邓正武",age:21}
            ]
        }
    })
</script>

image.png


三. v-text和v-html

3.1 v-text

v-text:用来获取data中数据将数据以文本的形式渲染到指定标签内部 类似于javascript 中** innerText**


    <div id="app" class="aa">
        <span >{{ message }}</span>
        <span v-text="message"></span>
        <!--    结果:hello vue 王恒杰-->
             <h1>{{msg}}王恒杰</h1>
        <!--    结果:hello vue-->
            <h1 v-text="msg">王恒杰</h1>
        <!--    结果:hello vue-->
            <h1 v-html="msg">王恒杰</h1>
        <!--    如果想在王恒杰后面写hello vue-->
            <h1>王恒杰<span v-text="msg"></span></h1>
    </div>
    <!--引入vue.js-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                message:"hello vue",
                msg:"whj"
            }
        })
    </script>
 <!--
    v-text 和 v-html:作用:用来获取vue实例中data属性声明数据
 使用语法:那个标签需要使用:直接在那个标签上面定义 v-text/v-html
 ** {{}}取值和v-text 取值区别:** 
  1.{{}}取值不会将标签的原始数据清空 使用v-text/v-html会清空标签的原始数据
  2.v-text、v-html也叫插值表达式
  3.{{}}取值出现插值闪烁(网络不好可能出现{{msg}},网络加载完后才出现hello vue)
    , v-text/v-html取值不会出现插值闪烁
-->
# 总结
        1.{{}}(插值表达式)和v-text获取数据的区别在于 
        a.使用v-text取值会将标签中原有的数据覆盖 使用插值表达式的形式不会覆盖标签原有的数据
        b.使用v-text可以避免在网络环境较差的情况下出现插值闪烁

{{}}出现插值闪烁

image.png


3.2 v-html

v-html:用来获取data中数据将数据中含有的html标签先解析在渲染到指定标签的内部 类似于javascript中 innerHTML


<div id="app" class="aa">
        <span>{{message}}</span>
        <br>
        <span v-text="message"></span>
        <br>
        <span v-html="message">xxxxxx</span>
    </div>
    <!--引入vue.js-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
            el:"#app",
            data:{
                message:"<a href=''>点击获取数据</a>"
            }
        })
    </script>

3.3 v-html与v-text的区别

(1)例1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-text/v-html指令使用</title>
</head>
<body>
<div id="app">
    <h1>{{msg}}</h1>
<!--
  **v-text(innerText)与v-html(innerHtml)的区别** 
  1.使用v-text取值:直接将获取的数据渲染到指定标签
  2.使用v-html取值:先将获取的数据解析为html,在渲染到指定标签中
-->
<!--    v-html与v-text的区别-->
    <span v-text="content"></span><br/>
    <span v-html="content"></span>
</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
            content:"<a href='http://www.baidu.com'> 点我查看详情</a>"
        }
        });
</script>


image.png

(2)例2:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
<div id="app">
  <h1>两个{}{}(插值表达式)展示:{{message}}</h1>
  <hr/>
  <h1 v-text="message"></h1>
  <hr/>
  <h1 v-html="message"></h1>
<!--
   v-text和v-html和{{}}(插值表达式)的区别
   1、{{}}取值不会覆盖标签中的内容
      v-text和v-html会覆盖原有的值
   2、使用v-text避免网络较差的情况下,插值表达式取值容易出现插值闪烁,而v-text不会出现插值闪烁
-->
  <h1 v-text="context"></h1>
  <h1 v-html="context"></h1>
<!--  v-text v-html的取值区别
   v-text 等价于 js innerText 获取内容时标签会按照文本处理
   v-html 等价于 js innerHtml 获取内容会按html处理
-->
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
  new Vue({
    el:"#app",
    data:{
      message:"vue欢迎你",
      context:"王恒杰<font color='red'>优秀</font>"
    }
  })
</script>

image.png


四.vue中事件绑定(v-on)

4.1 绑定事件基本语法

   #### (1)基础


<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>vue的事件绑定v-on</title>
</head>
<body>
<div id="app">
    <button v-on:click="test1">点我</button>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
          message:"王恒杰"
        },
        methods:{
            test1:function () {
                alert("王恒杰长的最好看?");
            }
        }
    })
</script>
<!--
  事件: js 中的事件编程 3大要素
  1、事件源: 发生这个事件的源头标签 html标签
  2、事件属性 用户的一些操作 on... onclick ondblclick onmouseover onmouseout
  3、事件监听 发生事件后的处理方案[执行的功能] 函数
  vue中的事件绑定 三大要素
  事件绑定的语法: v-on:事件属性=“监听函数的名字”
  函数定义:要定义在vue实例中的method属性中
  定义语法: 函数名:function(){//函数功能}
-->

image.png


   - 注意事项:v-on报红问题

image.png



(2)this的用法

  methods:{   //在实例中定义函数
           test1:function (){
               //将data中的score分数+1 this 当前的实例对象
              console.log(this);
           }
        }

image.png

(3)通过this.属性名获取属性值进行操作

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>vue的事件绑定v-on</title>
</head>
<body>
<div id="app">
    <!--MVVM  Model模型 V:view视图 双向绑定   ViewModel(监听器)-->
    <h2>{{message}}</h2>
    <h2><font color="red">{{score}}</font></h2>
    <button v-on:click="test1" >点我</button>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
          message:"王恒杰",
            score:"99"
        },
        methods:{   //在实例中定义函数
           test1:function (){
               //将data中的score分数+1 this 当前的实例对象
             this.score++;
           }
        }
    })
</script>
<!--
-->

image.png


<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>vue的事件绑定v-on</title>
</head>
<body>
<div id="app">
    <!--MVVM  Model模型 V:view视图 双向绑定   ViewModel(监听器)-->
    <h2>{{message}}</h2>
    <h2><font color="red">{{score}}</font></h2>
    <button v-on:click="test1" >点我</button>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
          message:"王恒杰",
            score:"99"
        },
        methods:{   //在实例中定义函数
           test1:function (){
               //将data中的score分数+1 this 当前的实例对象
             this.score++;
             this.test2();
           },
            test2:function () {
                 console.log("少考一点分,要报表了!!!")
            }
        }
    })
</script>
<!--
-->

image.png


#总结:
    事件  事件源:发生事件dom元素  事件: 发生特定的动作  click....  监听器  
             发生特定动作之后的事件处理程序 通常是js中函数
    1.在vue中绑定事件是通过v-on指令来完成的 v-on:事件名 如  v-on:click
    2.在v-on:事件名的赋值语句中是当前事件触发调用的函数名
    3.在vue中事件的函数统一定义在Vue实例的methods属性中
    4.在vue定义的事件中this指的就是当前的Vue实例,
      日后可以在事件中通过使用this获取Vue实例中相关数据调用methods中相关方法

(4)事件案例

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>vue的事件绑定v-on</title>
</head>
<body>
<div id="app">
    <!--MVVM  Model模型 V:view视图 双向绑定   ViewModel(监听器)-->
    <h2>{{message}}</h2>
    <h2><font color="red">{{score}}</font></h2>
    <button v-on:click="incr" >点击分数+1</button>
    <button v-on:click="addMore(10)" >点击分数+任意</button>
    <button v-on:click="addMoreAndString(20,'成绩优秀',false,true)" >点击分数+任意,message拼接一个字符串</button>
<!--    <button v-on:click="obj({num:100,message:'王恒杰',sex:false,score:100})" >点击分数+任意</button>-->
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
          message:"王恒杰",
            score:"59"
        },
        methods:{   //在实例中定义函数
         incr:function(){
             this.score++;
         },
         addMore:function (number) {
             this.score+=number;
         },
            addMoreAndString:function (num,grade,a,b) {
                this.score+=num;
                this.message+=grade;
                console.log(a);
                console.log(b)
            }
        },
        obj:function (obj) {
           console.log(obj)
        }
    })
</script>

image.png

注意:


1、双向绑定机制 MVM,Model<==> ViewModel(视图模型,监听器,监听model的改变,一旦改变影响View)==>View(视图) data数据:model {{message}}这个就是view


4.2 Vue中事件的简化语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件的简化写法</title>
</head>
<body>
<div id="app">
   {{name}}
    <h1><font color="red">{{score}}</font></h1>
    <button @click="incr()">点击+1</button>
    <button @Click="desc()">点击-1</button>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
  new Vue({
    el: "#app",  //指定vue实例
    data: {   //为实例创建数据
    name:"王恒杰",
    score:59
    },
    methods:{
   incr(){
       this.score++;
   },
   desc(){
       this.score--;
   }
    }
  })
</script>
<!--
 当前事件绑定的方式:v-on:事件属性=“监听函数名”
 绑定事件简化方式:@事件属性=“监听函数名”
-->

image.png

# 总结:
      1.日后在vue中绑定事件时可以通过@符号形式 简化  v-on 的事件绑定

4.3 Vue事件函数两种写法

    <div id="app">
        <span>{{count}}</span>
        <input type="button" value="改变count的值" @click="changecount">
    </div>
    <!--引入vue.js-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        const app = new Vue({
           el:"#app",
           data:{
               count:1,
           },
           methods:{
               /*changecount:function(){
                   this.count++;
               }*/
               changecount(){
                   this.count++;
               }
           }
        });
    </script>
# 总结:
      1.在Vue中事件定义存在两种写法  
         一种是 函数名:function(){}       
           一种是  函数名(){} 推荐

简化语法及简化函数写法

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>v-on简化写法</title>
</head>
<body>
<div id="app">
<h1>{{msg}}</h1>
<h1>{{count}}</h1>
<!--
 v-on:用来给标签绑定特定事件
-->
  <button v-on:click="incrementAge">点击年龄+1</button>
<!--  v-on==>简化写法:@ 语法“@事件名-事件处理函数名-->
  <button @click="incrementAge">点击年龄+1</button>
<!--  简化函数后-->
  <button @click="test(5)">点击年龄+N</button>
</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
  new Vue({
    el:"#app",
    data:{
      msg:"王恒杰",
      count:0,
    },
    methods:{
   incrementAge:function(){
     this.count++;
  },
      //  简化函数  原定义函数:函数名:function(){}==>函数名(){}
      test(n){
      this.count+=n;
      }
    },
  });
</script>

4.4 Vue事件参数传递

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>参数的传递</title>
</head>
<body>
<div id="app">
    <h1><font color="red">姓名:{{users[1].name}}</font></h1>
    <h2>分数:{{score}}</h2>
    <input type="button" @click="incr('优秀')" value="点击修改分数">
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    new Vue({
        el: "#app",
        data: {
            users: [
                {"id": 1, "name": "王恒杰", "score": 81},
                {"id": 2, "name": "杨福君", "score": 60},
                {"id": 3, "name": "王晨阳", "score": 82}
            ],
           score:81
        },
        methods: {
            incr(msg) {
                this.score++;
                console.log(msg);
            }
        }
    })
</script>

image.png

# 总结:
  1.在使用事件时,可以直接在事件调用处给事件进行参数传递,在事件定义处通过定义对应变量接收传递的参数

v-on传递参数案例

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>v-on在函数中传递参数</title>
</head>
<body>
<div id="app">
  <h1>{{msg}}</h1>
  <h1>年龄:{{count}}</h1>
<button v-on:click="incrementAge">点我每次给年龄+1</button>
<!--  执行事件,并给事件传递参数-->
  <button v-on:click="changeAge(20)">点我每次给年龄+不确定</button>
<!--  传零散数据-->
  <button v-on:click="changeAgeAndMsg(2,'小黑')">点我每次给年龄+不确定,同时msg+"你好"</button>
<!--  传对象-->
  <button v-on:click="changeAgeAndMsg2({n:2,msg:'王恒杰'})">点我每次给年龄+不确定,同时msg+"你好"</button>
</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
 new Vue({
    el:"#app",
    data:{
      msg:"王恒杰",
      count:20
    },
    methods:{
      incrementAge:function (){
        this.count++;
      },
      //函数上面添加变量
      changeAge:function(n){
        console.log(n);
        this.count+=n;
      },
      //传零散数据
      changeAgeAndMsg:function(n,msg){
        console.log(n);
        console.log(msg);
        this.count+=n;
        this.msg="你好!"+msg;
      },
      //传对象
      changeAgeAndMsg2:function(param){
        console.log(param);
        this.count+=param.n;
        this.msg="你好!"+param.msg;
      }
    }
  });
</script>

五.v-show v-if v-bind

5.1 v-show

v-show:用来控制页面中某个标签元素是否展示


<div id="app">
    <!--
        v-show: 用来控制标签展示还是隐藏的
    -->
    <h2 v-show="false">天津商业大学欢迎你的加入!</h2>
    <h2 v-show="show">天津商业大学欢迎你的加入这是vue中定义变量true!</h2>
    <input type="button" value="展示隐藏标签" @click="showmsg">
</div>
<!--引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            show:false,
        },
        methods:{
            //定义时间
            showmsg(){
               this.show =  !this.show;
            }
        }
    })
</script>
# 总结
      1.在使用v-show时可以直接书写boolean值控制元素展示,也可以通过变量控制标签展示和隐藏
      2.在v-show中可以通过boolean表达式控制标签的展示和隐藏

5.2 v-if

v-if: 用来控制页面元素是否展示


<div id="app">
    <h2 v-if="false">百知教育</h2>
    <h2 v-if="show">百知教育欢迎你的加入</h2>
</div>
<!--引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            show:false
        },
        methods:{
        }
    });
</script>

v-if与v-show的区别

<div id="app">
<!--
v-if与v-show的区别:
1.v-if 底层通知控制dom树上的元素节点 页面标签展示和隐藏 dom树
2.v-show 底层通过控制标签css中display属性实现标签展示和隐藏 css
-->
    <h1 name="if" v-if="isshow">{{msg}}</h1>
    <h1 name="show" v-if="isshow">{{msg}}</h1>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#app",
        data:{
          msg:"王恒杰",
            isshow:false
        },
        methods:{
        }
    });
</script>

v-show在谷歌里面的控制台 由css实现


image.png


5.2.1:v-if&&v-show案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-if与v-show案例</title>
</head>
<body>
<div id="app">
    <h1>{{msg}}</h1>
    <h2 v-show="isShow">{{msg}}</h2>
    <button @click="hidenH2">用来隐藏h2标签</button>
    <button @click=" showH2">用来显示h1标签</button>
    <button @click="showHiddenH2">用来显示、隐藏h2</button>
<!--    直接调用data-->
    <button @click="isShow=!isShow">用来显示、隐藏h2(直接操作data的属性)</button>
</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: "#app",
        data: {
            msg: "王恒杰",
            isShow: true
        },
        methods: {
            hidenH2() {
                this.isShow = false;
            },
            showH2() {
                this.isShow = true;
            },
            showHiddenH2() {
                //    替换
                this.isShow=!this.isShow;
                // if (this.isShow) {
                //     this.isShow = false;
                // } else {
                //     this.isShow = true;
                // }
            }
        }
    });
</script>

v-if&v-show案例

<!DOCTYPE html>
<html lang="en" xmlns:v-html="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>v-if&v-show案例二</title>
</head>
<body>
<div id="app">
  <h1>{{msg}}</h1>
  <div style="height: 200px;width: 200px;background-color: red; " v-show="isShow" v-on:mouseover="hidden"></div>
</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
  new Vue({
    el:"#app",
    data:{
      msg:"天津商业大学",
      isShow:true,
    },
    methods:{
       hidden:function (){
         this.isShow=false;
       }
    }
  });
</script>

5.3 v-bind

v-bind: 用来绑定标签的属性从而通过vue动态修改标签的属性


<div id="app">
    <img width="300" v-bind:title="msg" v-bind:class="{aa:showCss}"  src="baizhilogo.jpg" alt="">
</div>
<!--引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            msg:"天津商业大学官方logo!!!!",
            showCss:true,
        },
        methods:{
        }
    })
</script>

5.4 v-bind 简化写法

vue为了方便我们日后绑定标签的属性提供了对属性绑定的简化写法如 v-bind:属性名 简化之后 :属性名


<div id="app">
    <img width="300" :title="msg" :class="{aa:showCss}"  :src="src" alt="">
    <input type="button" value="动态控制加入样式" @click="addCss">
    <input type="button" value="改变图片" @click="changeSrc">
</div>
<!--引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el:"#app",
        data:{
            msg:"TJCU官方logo!!!!",
            showCss:true,
            src:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1583490365568&di=52a82bd614cd4030f97ada9441bb2d0e&imgtype=0&src=http%3A%2F%2Fimg.kanzhun.com%2Fimages%2Flogo%2F20160714%2F820a68f65b4e4a3634085055779c000c.jpg"
        },
        methods:{
            addCss(){
                this.showCss= !this.showCss;
            },
            changeSrc(){
                this.src = "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1925088662,1336364220&fm=26&gp=0.jpg";
            }
        }
    })
</script>

六.v-for的使用

v-for: 作用就是用来对对象进行遍历的(数组也是对象的一种)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-for</title>
</head>
<body>
<div id="app">
    <!--
      v-for遍历数据 用于遍历vue中的对象 数组 对象数组
    1.  遍历单个对象语法:<标签 v-for="当前元素(value,key,index) in data中变量名">
    2.  遍历数组:  <标签 v-for="value,index in data中属性名">
    2.  遍历对象数组:  <标签 v-for="value,index in data中属性名">
   -->
    <h2>1: 基础获取对象</h2>
    <span>{{user.id}}</span><br/>
    <span>{{user.name}}</span><br/>
    <span>{{user.age}}</span><br/>
    <span>{{user.address}}</span><br/>
    <span>{{user.content}}</span><br/>
    <hr/>
    <h2>2:展示对象内容</h2>
        <span v-for="(u,key,index) in user">{{key}}-{{u}}-{{index}}</span>
    <hr/>
    <h2>遍历普通数组</h2>
    <ul>
        <li v-for="name,index in names">{{index}}_{{name}}</li>
    </ul>
    <h2>遍历对象数组</h2>
    <table border="1px" >
        <tr>
            <td>ID</td>
            <td>name</td>
            <td>address</td>
            <td>age</td>
            <td>content</td>
        </tr>
        <tr v-for="user,index in users" :key="user.id">
            <td>{{user.id}}</td>
            <td>{{user.name}}</td>
            <td>{{user.address}}</td>
            <td>{{user.age}}</td>
            <td>{{user.content}}</td>
        </tr>
    </table>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
    //vue代码
    new Vue({
        el: "#app",  //vue的实例作用范围
        data: {   //vue中定义的一系列数据
            user:{id: 1, name: "王恒杰", age: 21, address: "天津商业大学", content: "好好学习,天天向上"},
            names:["王恒杰","杨福君","邓正武","王晨阳"],
            users:[
                {id: 1, name: "王恒杰", age: 21, address: "天津商业大学", content: "好好学习,天天向上"},
                {id: 2, name: "杨福君", age: 21, address: "天津商业大学", content: "好好学习,天天向上"},
                {id: 3, name: "王晨阳", age: 21, address: "天津商业大学", content: "好好学习,天天向上"},
            ]
        },
        methods: {   //vue中定义的一系列函数 方法
        }
    })
</script>

image.png


# 总结
  1.在使用v-for的时候一定要注意加入:key 用来给vue内部提供重用和排序的唯一key 

七 .v-model 双向绑定

v-model: 作用用来绑定标签元素的值与vue实例对象中data数据保持一致,从而实现双向的数据绑定机制


image.png


零散数据建的双向绑定

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>v-model指令</title>
</head>
<body>
<div id="app">
<!--
v-model双向绑定
作用:绑定标签对象的value属性值 交由vue实例管理 只能绑定value属性值
 语法<input type="text" v-mode="data属性名">
-->
  <form>
    姓名:<input type="text" v-model="name"><br/>
    密码:<input type="text" v-model="pwd"><br/>
    年龄:<input type="text" v-model="age"><br/>
    地址:<input type="text" v-model="addr"><br/>
    <input type="button" value="注册" @click="register()">
  </form>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
  //vue代码
  new Vue({
    el: "#app",  //vue的实例作用范围
    data: {   //vue中定义的一系列数据
      name:"",
      pwd:"",
      age:18,
      addr:""
    },
    methods:{
     register(){
       //获取用户输入的数据
       console.log(this.name);
       console.log(this.pwd);
       console.log(this.age);
       console.log(this.addr);
       //
     }
    }
  })
</script>

image.png

对象的双向绑定

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>v-model指令</title>
</head>
<body>
<div id="app">
<!--
v-model双向绑定
作用:绑定标签对象的value属性值 交由vue实例管理 只能绑定value属性值
 语法<input type="text" v-mode="data属性名">
-->
  <form>
    姓名:<input type="text" v-model="user.name"><br/>
    密码:<input type="text" v-model="user.pwd"><br/>
    年龄:<input type="text" v-model="user.age"><br/>
    地址:<input type="text" v-model="user.addr"><br/>
    <input type="button" value="注册" @click="register()">
  </form>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
  //vue代码
  new Vue({
    el: "#app",  //vue的实例作用范围
    data: {   //vue中定义的一系列数据
      user:{}
    },
    methods:{
     register(){
       //获取用户输入的数据
       console.log(this.user.name);
       console.log(this.user.pwd);
       console.log(this.user.age);
       console.log(this.user.addr);
       console.log(this.user);
       //发送ajax请求
       $.get("url",user,function () {
       },"json")
     }
    }
  })
</script>

image.png


# 总结
    1.使用v-model指令可以实现数据的双向绑定 
    2.所谓双向绑定 表单中数据变化导致vue实例data数据变化   
      vue实例中data数据的变化导致表单中数据变化 称之为双向绑定
# MVVM架构  双向绑定机制
  Model: 数据  Vue实例中绑定数据
  VM:   ViewModel  监听器
  View:  页面  页面展示的数据

八. 事件修饰符

修饰符: 作用用来和事件连用,用来决定事件触发条件或者是阻止事件的触发机制


# 1.常用的事件修饰符
  .stop    停止
  .prevent 阻止
  .self    独自
  .once    一次

8.1 stop事件修饰符

用来阻止事件冒泡


** 事件冒泡:** 父子标签监听相同的事件属性,触发子标签事件时,同时扩散到父标签,导致父标签事件也运行

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model指令</title>
</head>
<body>
<div id="app">
  <!--
  事件修饰符:
  事件冒泡:父子标签监听相同的事件属性,触发子标签事件时,同时扩散到父标签,导致父标签事件也运行
  -->
  <div @click="outer()" style="border: solid 1px red;background-color: red;width: 200px;height: 200px">
    <div  @click="inner()" style="border: solid 1px greenyellow;background-color: greenyellow;width: 100px;height: 100px"></div>
  </div>
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
  //vue代码
  new Vue({
    el: "#app",  //vue的实例作用范围
    data: {   //vue中定义的一系列数据
    },
    methods:{
      outer(){
        console.log("外层被触发了")
      },
      inner(){
        console.log("内层被触发了")
      }
    }
  })
</script>


image.png

.stop 阻止事件冒泡

image.pngimage.png




8.2 prevent 事件修饰符

用来阻止标签的默认行为


<!--用来阻止事件的默认行为-->
<a href="http://www.baizhibest.com/" @click.prevent="aClick">tjsydx</a>

8.3 self 事件修饰符

用来针对于当前标签的事件触发 ===========> 只触发自己标签的上特定动作的事件 只关心自己标签上触发的事件 不监听事件冒泡


<!--只触发标签自身的事件-->
<div class="aa" @click.self="divClick">
  <!--用来阻止事件冒泡-->
  <input type="button" value="按钮"  @click.stop="btnClick">
  <input type="button" value="按钮1" @click="btnClick1">
</div>

8.4 once 事件修饰符

once 一次作用: 就是让指定事件只触发一次


    <!--
    .prevent : 用来阻止事件的默认行为
    .once    : 用来只执行一次特定的事件
    -->
    <a href="http://www.baizhibest.com/" @click.prevent.once="aClick">百知教育</a>

九. 按键修饰符

作用: 用来与键盘中按键事件绑定在一起,用来修饰特定的按键事件的修饰符


# 按键修饰符
  .enter
  .tab
  .delete (捕获“删除”和“退格”键)
  .esc
  .space
  .up
  .down
  .left
  .right

9.1 enter 回车键

用来在触发回车按键之后触发的事件


 <input type="text" v-model="msg" @keyup.enter="keyups">

9.2 tab 键

用来捕获到tab键执行到当前标签是才会触发


<input type="text" @keyup.tab="keytabs">

9.3 案例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>v-model指令</title>
</head>
<body>
<div id="app">
  <!--
    按键修饰符:与键盘的事件属性连用
    .enter 回车
    .tab tab键
    .delete  删除
    .esc  退出
    .space  空格
    .up  上
    .down  下
    .left  左
    .right  右
  -->
  <input type="text" v-model="value" @keyup.enter="keyUp()">
</div>
</body>
</html>
<script src="js/vue-min.js"></script>
<script>
  //vue代码
  new Vue({
    el: "#app",  //vue的实例作用范围
    data: {   //vue中定义的一系列数据
      value:""
    },
    methods:{
      keyUp(){
       console.log("触发按键弹起监听功能")
      }
    }
  })
</script>

image.png

十.后续发布vue博客相关内容

🍅 Vue学习之路(基础篇)

🍅 vue的学习之路(Axios 基本使用)

🍅 vue的学习之路(Vue 生命周期)

🍅 vue的学习之路(Vue中组件(component))

🍅 vue的学习之路(Vue中路由 (Vue Router))

🍅 vue的学习之路(Vue CLI 脚手架)

🍅 vue的学习之路(VueX 状态管理)


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
7天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
7天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
7天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
7天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
6天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
8天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
6天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
8天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
20天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
13天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发