Vue学习记录(一)

一、快速入门

1、什么是Vue?

  • Vue是一套构建用户界面的渐进式前端框架。
  • 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合。
  • 通过尽可能简单的API来实现响应数据的绑定和组合的视图组件。

2、特点

  • 易用:在有HTMLCSSJavaScript的基础上,快速上手。
  • 灵活:简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。
  • 性能:20kbmin+gzip运行大小、超快虚拟DOM、最省心的优化。

3、快速入门

3.1、下载vue.js 文件

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

//生产版本:
	<!-- 生产环境版本,优化了尺寸和速度 -->
	<script src="https://cdn.jsdelivr.net/npm/vue"></script>

3.2、引入到页面(页面包括2个部分)
视图:负责页面渲染,主要由HTML+CSS构成。
脚本:负责业务数据模型(Model)以及数据的处理逻辑。

<body>
<!--视图-->
<div id="div">  {{msg}}  </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script>
	//脚本
    new Vue({
        el:"#div",
        data:{
            msg: "lvmanba"
        },
        //
        methods:{},
        //计算属性
        //也可以理解为把涉及到计算的函数放在computed里面,日后涉及到计算的尽可能都放在这里,原因是能提升Vue的性能,即将第一次计算的结果进行缓存(只运行一次),在页面中可以重复使用。
        computed:{}
    })
</script>
</html>

computed和methods的区别:
在我们的实际开发中,有时很难去确定具体用computed还是methods,因为这两种方法最后的到的结果是一样的,但是他们的原理和用法却完全不同。

1、调用方式不同。computed直接以对象属性方式调用,不需要加括号,而methods必须要函数执行才可以得到结果。
2、绑定方式不同。methods与compute纯get方式都是单向绑定,不可以更改输入框中的值。compute的get与set方式是真正的双向绑定。
3、是否存在缓存。methods没有缓存,调用相同的值计算还是会重新计算。competed有缓存,在值不变的情况下不会再次计算,而是直接使用缓存中的值。
4、computed是响应式的,methods并非响应式

var vm = new Vue({
 			// 选项,各种属性
			el:" ",   //el: element 元素  代表vue实例的作用范围,用于获取范围内的元素。但不能作用于html 或者body标签。
			//数据  这里是一个对象,作用是自定义或者获取各种类型的数据,用于给当前vue实例绑定数据,在作用范围内使用{{ 变量名}}
			data: {
				msg:"lvmanba"     //键值对,可以定义多组数据,变量名和对应的值,在作用范围内的html中使用{{ msg }} 就能获取到值
			 }methods:{  //用来给vue实例绑定一系列的函数   方法
			}
})

注意事项:
1、一个页面中只能存在一个Vue实例,不能创建多个vue实例
2、vue中el属性:给实例提供作用范围
3、vue实例中data属性:给当前指定范围内提供数据来源,可以使用{{ 变量名}} 获取
4、使用{{ }} 进行data中数据获取时,可以在{{ }}取值语法中进行算数运算,逻辑运算以及调用相关类型的相关方法。如:
{{ msg+1}}、{{ msg.toUpperCase() }}、{{ msg.length }}、{{ msg == “hello vue”}}
5、vue实例中el属性可以书写任何css选择器,但是推荐使用id选择器,因为以个vue实例值能作用于一个具体作用范围。

<body>
  <div id="app">
    <h1>{{msg}}</h1>
    <h1>{{count}}</h1>
    <h1>{{user}}</h1>
    <h1>{{user.id}}---{{user.name}}---{{user.age}}</h1>
    <h1>{{school}}</h1>
    <h1>{{school[0]}}</h1>
    <h1>{{users}}</h1>
    <h1>{{users[0].name}}</h1>
  </div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
  var app = new Vue({  //变量app为实例对象的返回值
    el:"#app",  //指定了vu实例的作用范围
    data:{ //用来给vue实例定义一系列的数据
      msg:"lvmanba",  //字符串
      count:0,
      user:{id:1,name:"lvmanba",age:30}, //对象
      school:["东北师范大学","吉林农业大学","山东农业大学"], //数组
      users:[                          //数组中放对象
        {id:1,name:"lvmanba1",age:301},
        {id:2,name:"lvmanba2",age:302},
        {id:3,name:"lvmanba3",age:303}
      ],
    },
  });
</script>

使用函数

<div id="div">
    <div>{{msg}}</div>
    <div>  <button onclick="hi()">点我</button> </div>
    <div>  <button type="button" v-on:click="study">点我</button> </div>
    <div>  <button  @click="my">点我</button></div>
</div>

</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script>
    let vm = new Vue({
        el:"#div",
        data:{
            msg: "Hello Vue",
            sex: 'girl'
        },
        methods:{
            study(){
                alert(this.msg)
            },
            my(){
                alert("i am student " + this.sex)
            }

        }
    });
    function  hi(){
        vm.study()
    }

</script>

二、常用的指令

  • 指令:是带有 v- 前缀的特殊属性,不同指令具有不同含义。例如 v-html,v-if,v-for。
  • 使用指令时,通常编写在标签的属性上,值可以使用 JS 的表达式。
  • 常见的指令
    在这里插入图片描述

1.1、{{}} 、v-text,v-html

v-text 和 v-html 类似于javascript中 innerHTML。
v-text:用来获取data中数据将数据以文本的形式渲染到指定标签内部(字符串原样输出,有HTML标签的,也直接输出) ,他也直接使用{{ msg }} 效果一直。 v-text可以避免在网络环境较差的情况下出现插值闪烁。
v-html:用来获取data中数据将数据中含有的html标签先解析在渲染到指定标签的内部(经过渲染后输出,如下面就输出黑体)

<div id="page">
  <div>
    <div>v-html、v-text: 如果是单个字符串,二者效果相同。 </div>
    <div>
       <h1>{{ msg }}</h1>      
      <h1 v-text="msg"></h1>
      <h1 v-html="msg"></h1>
    </div>
  </div>
  
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
<script>
  let vm = new Vue({
    el: "#page",
    data:{
      msg:"<b>Hello Vue</b>"
    },
    methods:{    }
  })
</script>
</html>

1.2 绑定属性 v-bind:

使用方法: v-bind:属性名 或者 简写 :属性名 。如 v-bind:href="url" <==> :href="cls" 或者 v-bind:css="url" <==> :css="cls"

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绑定属性</title>
    <style>
        .my{
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div id="div">
        <a v-bind:href="url">百度一下</a>
        <br>
        <a :href="url">百度一下</a>
        <br>
        <div :class="cls">我是div</div>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#div",
        data:{
            url:"https://www.baidu.com",
            cls:"my"
        }
    });
</script>

1.3 条件渲染

  • v-if:条件性的渲染某元素,判定为真时渲染,否则不渲染。
  • v-else:条件性的渲染。
  • v-else-if:条件性的渲染。
  • v-show:如果条件为真,则展示某元素,否则隐藏,区别在于切换的是display属性的值。
<body>
    <div id="div">
        <!-- 判断num的值,对3取余  余数为0显示div1  余数为1显示div2  余数为2显示div3 -->
        <div v-if="num % 3 == 0">div1</div>
        <div v-else-if="num % 3 == 1">div2</div>
        <div v-else="num % 3 == 2">div3</div>

        <div v-show="flag">div4</div>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#div",
        data:{
            num:1,
            flag:false
        }
    });
</script>

1.4 列表渲染 v-for

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

<body>
    <div id="div">
        <ul>
            <li v-for="name in names">
                {{name}}
            </li>
            <li v-for="value in student">
                {{value}}
            </li>
        </ul>
    </div>
</body>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el:"#div",
        data:{
            //数组
            names:["张三","李四","王五"],
            //对象
            student:{
                name:"张三",
                age:23
            }
        }
    });
</script>

1.5 事件绑定 v-on: click

如点击事件:v-on:click="changeage" 等价于 @click="editage"
双击事件:v-on:dblclick=" "
1.在vue中绑定事件是通过v-on指令来完成的 v-on:事件名 如 v-on:click = “ ”
2.在v-on:事件名的赋值语句中是当前事件触发调用的函数名 v-on:click = "函数名",函数名后面可以传递参数。
3.在vue中事件的函数统一定义在Vue实例的methods属性中
4.在vue定义的事件中this指的就是当前的Vue实例,日后可以在事件中通过使用this获取Vue实例中相关数据 调用methods中相关方法

<div id="app">
  <h2>{{ age }}</h2>
  <!--  正常格式:v-on: click  -->
  <input type="button" value="通过v-on事件修改年龄每次+1" v-on:click="changeage">
    <!-- 通过简写 @click  -->
  <input type="button" value="通过@绑定时间修改年龄每次-1" @click="editage">
  -----------------------------------------------------------------------------
  <span>{{count}}</span>
  <input type="button" value="改变count为指定的值" @click="changecount(23,'xiaohei')">
</div>
<!--引入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  const app = new Vue({
    el:"#app",  //element: 用来指定vue作用范围
    data:{
      age:23,
      count:1
    },    //data   : 用来定义vue实例中相关数据
    methods:{
    //函数可以使用下列两种方法来定义,但是推荐使用第二种。
      changeage:function(){
        this.age++;
      },
      editage(){
        this.age--;
      },
      changecount(count,name){
                   this.count = count;
                   alert(name);
     }
    }  
  });
</script>

1.6 v-model 双向绑定

  • 表单绑定
    v-model:在表单元素( input、textarea以及select)上创建双向数据绑定。

  • 双向数据绑定
    更新data数据,页面中的数据也会更新。
    更新页面数据,data数据也会更新。

  • MVVM模型(ModelViewViewModel):是MVC模式的改进版
    在前端页面中,JS对象表示Model,页面表示View,两者做到了最大限度的分离。
    将Model和View关联起来的就是ViewModel,它是桥梁。
    ViewModel负责把Model的数据同步到View显示出来,还负责把View修改的数据同步回Model。
    在这里插入图片描述

<body>
<div id="app">
    <input type="text" v-model="message">
    <span>{{message}}</span>
    <hr>
    <input type="button" value="改变Data中值" @click="changeValue">
</div>
</body>
<!--引入vue-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            message:""
        },
        methods: {
            changeValue(){
                this.message='百知教育!';
            }
        }
    });
</script>

1.7 事件修饰符

修饰符: 作用用来和事件连用,用来决定事件触发条件或者是阻止事件的触发机制
使用方法: @事件名称. 事件修饰符=“函数名” ===> @click.stop = “msg”

# 1.常用的事件修饰符
    .stop    执行完了停止,阻止向上继续激活分类的事件
	.prevent 阻止标签的默认行为
	.self    只监听自己,不管别人
	.once    只触发一次

1) stop事件修饰符

用来阻止事件冒泡: 在同一个范围内,点击子类事件,会触发父类的事件,如 a–>div–>body 他们都有点击事件,如果点击a 的事件,那么div 和 body 就会依次激活。 从里向外扩散

<div id="app">
    <div class="aa" @click="divClick">
        <!--用来阻止事件冒泡-->
        <input type="button" value="按钮" @click.stop="btnClick">
    </div>
</div>
<!--引入vue-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  const app = new Vue({
    el: "#app",
    data: {},
    methods: {
      btnClick(){
        alert('button被点击了');
      },
      divClick(){
        alert('div被点击了');
      }
    }
  });
</script>

2) prevent 事件修饰符

用来阻止标签的默认行为:下面默认的是先执行click事件,然后在开始跳转,如果使用了prevent之后,跳转就失效,
相当于 href=“javascript:;”

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

3) self 事件修饰符

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

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

4) once 事件修饰符

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

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

1.8 按键修饰符

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

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

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

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

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

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值