Vue学习基础版汇总V1.0.0

Vue学习基础版汇总

1.Vue简介

1.1.Vue概念

  • 是一套用于构建用户界面的前端框架。

1.2.Vue特性

  • 数据驱动视图

    • 使用vue的页面,vue会监听数据的变化,从而自动重新渲染页面的结构,如下图:
      在这里插入图片描述
    • 优点:
      • 当页面数据发生变化时,页面会自动重新渲染。
      • 数据驱动视图是单向的数据绑定
  • 双向数据绑定

    • 在填写表单时,双向数据绑定可以辅助开发者在不操作DOM的前提下,自动把用户填写的内容同步到数据源中,如下图:
      在这里插入图片描述
    • 优点:开发者不需要手动操作DOM元素,来获取表单元素最新的值!
      • form表单负责采集数据,Ajax负责提交数据。

1.3.MVVM原理

1.3.1.概述
  • MVVM是vue实现数据驱动视图和双向数据绑定的核心原理,指的是Model、View和ViewModel,把每个HTML页面拆分成了这三个部分
    • Model:表示当前页面渲染时所依赖的数据源。
    • View:表示当前页面渲染的DOM结构。
    • ViewModel表示vue的实例,它是MVVM的核心。
1.3.2.工作原理
  • ViewModel作为MVVM的核心,是它把当前页面的数据源(Model)和页面的结构(View)连接在了一起。
    在这里插入图片描述

  • 当数据源发生变化时,会被ViewModel监听到,VM会根据最新的数据源自动更新页面的结构。

  • 当表单元素的值发生变化时,也会呗VM监听到,VM会把变化过后最新的值自动同步到Model数据源中。


2.Vue基本使用

2.1.三步使用Vue

  1. 导入vue.js的script脚本文件。

  2. 在页面中声明一个将要被vue所控制的DOM区域。

  3. 创建vm实例对象(vue实例对象)

    1. 创建源码示例:
    <body>
    	<!--2.在页面中声明一个将要被 vue 所控制的DOM区域-->
        <div id="app">
            {{username}}
        </div>
        <!--1.导入 vue.js 的script 脚本文件-->
        <script src="./lib/vue-2.6.12.js"></script>
        <script>
     		<!--3.创建 vm 实例对象-->
                const vm = new Vue({
                    <!--3.1指定当前vm实例要控制页面的那个区域-->
                    el:'#app',
                    <!--3.2指定 Model 数据源-->
                    data: {
                    	username: 'douglas'
                	}
                })
        </script>
    </body>
    
  4. 基本代码与MVVM的对应关系
    在这里插入图片描述


3.Vue指令与过滤器

3.1.指令

  • 【概念】是vue为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构

  • 【指令分类】按照不同的用途分为6大类:

3.1.1.内部渲染指令
  • 【作用】用来辅助开发者渲染DOM元素的文本内容,常用的渲染指令如下:

    • v-text

      • 【语法】
      <!--把username对应的值,渲染到第一个p标签中-->
      <p v-text="username"></p>
      <!-- 把gender对应的值,渲染到第二个p标签中-->
      <!--注意:默认的文本“性别”会被gender的值覆盖掉-->
      <p v-text="gender">性别</p>
      
      • 【缺点】会覆盖原本标签内的默认值内容
    • {{}}

      • 【作用】
        • 专门用来解决v-text会覆盖默认文本内容的问题,这种{{}}语法专业名称是插值表达式。
      • 【语法】
      <!--使用 {{}} 插值表达式,将对应的值渲染到元素的内容节点中-->
      <!--同时保留元素自身的默认值-->
      <p>姓名:{{username}}</p>
      <p>性别:{{gender}}</p>
      
    • v-html

      • 【作用】
        • 专门用来渲染包含HTML标签的字符串内容,将内容渲染为页面的HTML元素。
      • 【语法】
      <!--假设 data中定义了名为discription的数据,值为包含html标签的字符串-->
      <!-- '<h5 style="color:red;">I Love You</h5>'-->
      <p v-html="discirption"></p>
      
  • 【小结】

    • v-text:指令的缺点:会覆盖元素内部原有的内容!
    • {{}}:插值表达式:在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容!
    • v-html:可以把带有标签的字符串,渲染成真正的HTML内容!
3.1.2.属性绑定指令
  • 【作用】如果需要为元素的属性动态绑定属性值,则需要用到v-bind属性绑定指令。
  • 【语法】给placeholder属性动态绑定变量tips值
<input type="text" v-bind:placeholder="tips">
<image v-bind:src="photo" alt="" style="width:150px;"/>
  • 【注意】v-bind:可以简化使用冒号可替代":"

  • 【使用JS表达式】

    • Vue渲染中除了支持绑定简单的数据值之外,还支持JS表达式的运算,例如:
    {{ number + 1}}  //插值表达式变量计算
    {{ number > 99 ? '是' : '否'}}  //插值表达式支持三元运算符
    {{ message.split('').reverse().join('') }} //插值表达式支持字符串切割并且翻转
    //在使用v-bind属性绑定期间,可以对内容进行动态拼接,则字符串应该用单引号包裹
    <div v-bind:id=" 'name-' + id "></div> 
    
3.1.3.事件绑定指令
  • 【作用】v-on事件绑定指令,用来监听DOM元素绑定事件。
  • 【语法】v-on:事件名称=“事件处理函数的名称”
<h3>count的值为:{{count}}</h3>
<!--给button按钮绑定一个事件,并且可在事件内进行传参-->
<button v-on:click="addCount(1)">点我count加1哟</button>
<!--在vm中的methods模块中,编写addCount事件执行函数体-->
methods:{
	addCount:function(n){
		this.count++;
	}
}

在这里插入图片描述

  • 【注意】v-on可简写为’@’

  • 【拓展】原生态DOM对象有onClick、oninput、onkeyup等原生事件,在vue绑定事件之后均可为:

    • v-on:click、v-on:input、v-on:keyup

【内置变量传参】$event

  • vue提供了内置变量,名字叫做$event,它就是原生的DOM的事件对象e
  • 【案例】点击按钮改变数值同时也改变按钮的背景色
<div id="app">
        <h3>Count的值为:{{count}}</p>
        <button @click="addCount(3,$event)">每点我一次Count都要加3</button>
        <button @click="subCount(1)">点击我每次减掉1</button>
</div>
    <script>
        const vm = new Vue({
            el:"#app",
            data:{
                count:0
            },
            methods:{
                addCount:function(n,e){
                    this.count +=n;
                    if(this.count % 2 === 0){
                        e.target.style.backgroundColor = 'green';
                    }else{
                        e.target.style.backgroundColor = 'red';
                    }
                },
                subCount(n){
                    this.count -=n;
                }
            }
        })
    </script>

【事件修饰符】

  • 在事件处理函数中调用event.preventDefault()或者event.stopPropagation()是非常常见的需求;
  • vue提供了时间修饰符概念,对事件的触发进行控制。
  • 【案例1】阻止点击事件跳转链接
    • 阻止默认行为(防止a链接的跳转,阻止表单的提交等)
<!--触发click点击事件时,阻止a链接的默认跳转行为-->
<a href="http://www.baidu.com" @click.prevent="show">点击跳转百度</a>
  • 【案例2】阻止事件冒泡
<button @click.stop="show">百度一下</button>

【按键修饰符】

  • 【作用】在监听键盘事件时,需要判断详细的按键,可以为键盘相关的事件添加按键修饰符。
  • 【案例1】只有在key是Enter 时调用vm.submit()如下:
<input @keyup:enter="submit">
  • 【案例2】只有在key是Esc 时调用vm.clearInput()如下:
<input @keyup.esc="clearInput">
<!--通过内置变量$event获取输入的值-->
methods:{
	clearInput(e){
	e.target.value = '';
	}
}

3.1.4.双向绑定指令
  • 【作用】vue提供v-model双向数据绑定指令,用来快速获取表单的数据

  • 【使用】可以使用v-model指令的标签有

    • input输入框
    • textarea
    • select
  • 【案例】

<div id="app">
        <p>用户名是:{{username}}</p>
        <input type="text" v-model="username"/>
        <p>选中的省份是:{{provinceName}}</p>
        <select v-model="province">
            <option value="">请选择</option>
            <option value="1">北京</option>
            <option value="2">克拉玛依</option>
            <option value="3">湖北</option>
        </select>
    </div>
    <script>
        const vm = new Vue({
            el:"#app",
            data:{
                username:"douglas",
                province:2
            },
            motheds:{
            }
        })
    </script>

  • 【v-model专用修饰符】方便对用户输入的内容进行处理
    在这里插入图片描述
3.1.5.条件渲染指令
  • 【作用】按需要控制DOM的显示与隐藏
    • v-if 每次动态创建或移除元素,实现元素的显示和隐藏
      • v-else-if 必须配合v-if指令一起使用,否则将不会被识别。
      • v-else
    • v-show 动态为元素添加或移除display:none样式,来实现元素的显示和隐藏
  • 【案例】
<div id="app">
	<p v-if="networkState === 200">请求成功---v-if</p>
    <p v-show="networkState === 200">请求成功---v-show</p>
    <div v-if="type === 'A'">优秀</div>
    <div v-else-if="type === 'B'">良好</div>
    <div v-else-if="type === 'C'">一般</div>
    <div v-else></div>
</div>

3.1.6.列表渲染指令
  • 【语法】v-for列表渲染指令,基于一个数组来循环渲染一个列表结构
    • 需要使用item in items形式的特殊语法
      • items是待循环的数组
      • item是被循环的每一项
  • 【案例】
<ul>
    <li v-for="item in items">姓名是:{{item.name}}</li>
</ul>
data:{
	list:[
		{id:1,name:'DG'},
		{id:2,name:'FF'}
	]
}
  • 【v-for中的索引】

    • v-for指令还支持一个可选的第二个参数,即当前项的索引。
    • 【语法】 (item,index)in items
    • 【案例】item项与index索引都是形参,可以根据需要进行重命名
    <ul>
        <li v-for="(item,index) in items">索引是:{{index}},姓名是:{{item.name}}</li>
    </ul>
    
  • 【注意】只要用到了v-for指令,就必须绑定一个:key属性

    • 且尽量使用id作为key的值,且不能重复!!!(唯一性)
    • key的值类型必须是:字符串或数字类型
    <tr v-for="(item,index) in list" :key="item.id">
    	<td>{{index}}</td>
    	<td>{{item.id}}</td>
    </tr>
    

4.案例

  • 【实现vue的增删功能】源码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./lib/bootstrap.css">
</head>
<body>
    <div id="app">
        <form @submit.prevent="add">
            <div class="card">
                <div class="card-header">
                    <input type="text" placeholder="请输入汽车名称" v-model.trim="name">
                    <button type="submit">添加</button>
                </div>
            </div>
        </form>
        <table class="table table-bordered table-hover table-striped">
            <thead>
                <th>索引</th>
                <th>id</th>
                <th>姓名</th>
                <th>操作</th>
            </thead>
            <tbody>
                <tr  v-for="(item,index) in list">
                    <td>{{index + 1}}</td>
                    <td>{{item.id}}</td>
                    <td>{{item.name}}</td>
                    <td>
                        <a href="javascript:;" @click="remove(item.id)">删除</a>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
    <script src="./lib/vue.js"></script>
    <script>
        const vm = new Vue({
            el:"#app",
            data:{
                list:[
                    {id:1,name:"DG"},
                    {id:2,name:"FF"}
                ],
                name:"",
                nextId:3
            },
            methods:{
                remove(id){
                    console.log(id)
                    this.list = this.list.filter(item => item.id !== id)
                },
                add(){
                    if(this.name === ''){
                        alert("请填写名称!")
                        return
                    }
                    console.log(this.name)
                    //1.构建需要添加的对象
                    const obj = {
                        id:this.nextId,
                        name:this.name,
                    }
                    //2.添加数据到list数组
                    this.list.push(obj)
                    //3.清空输入框内容
                    this.name = ''
                    //4.设置下一个id加一
                    this.nextId += 1;
                }
            }
        })
    </script>
</body>
</html>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

以梦为馬Douglas

您的鼓励是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值