全网最全的VUE2.js知识大总结来啦---第一部分

目录

  • Vue的简介
  • Vue的基础用法
  • Vue的事件绑定
  • Vue的双向绑定
  • Vue的渲染
  • Vue的过滤器
  • Vue的侦听器
  • Vue的计算属性
  • Vue中axios的使用
  • Vue的props的运用
  • Vue的样式冲突
  • Vue的生命周期

前言

这是我自己根据黑马程序员的视频对Vue2.js进行的大总结,里面的内容可能会存在着很多不足的地方,但是该总结的我都把它写进去啦!!!,重点的知识我会在里面用红色的字体加粗哦!


一、Vue的简介

官方给出的概念:Vue是一套用于构建用户界面的前端框架

(1)、构建用户界面
     ---用vue往html页面中填充数据,非常的方便
(2)、框架
     ---是一套现成的解决方案

1、Vue的两大特性

(1)、数据驱动视图
      ---数据的变化会驱动视图自动更新
      ---好处:当页面数据发生变化时,页面会自动重新渲染


(2)、双向数据绑定
     ---在网页中,form表单负责采集数据,Ajax负责提交数据
     ---js数据的变化,会自动渲染到页面上
     --- 页面上表单采集的数据发生变化的时候,会被vue自动获取到,并更新到js数据中

 2MVVM

二、Vue的基础用法

1.基本使用步骤

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

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

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

<body>
    <div id="app">{{username}}</div>
    <!-- 1、导入Vue的库文件,在window全局就有了Vue这个构造函数 -->
    <script src="../lib/vue-2.6.12.js"></script>
    <script>
        //2、 创建Vue的实例对象
        const vm=new Vue({
            //el属性是固定写法,表示当前VM实例要控制页面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                username:'张三'
            }
        })
    </script>
</body>

2.指令

指令是Vue为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构

2.1 内容渲染指令

概念:内容渲染指令用来辅助开发渲染DOM元素的文本内容

(1)、v-text指令的缺点:会覆盖元素内部原有的内容!
(2) 、{{  }}插值表达式:在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容
(3)、 v-html指令的作用:可以把带有标签的字符串,渲染成真正的HTML内容,{{}}和v-text只能渲染纯文本

注意:(1)、{{  }}插值表达式只能用在元素的内容节点中,不能用在元素的属性节点中

(2)插值里面可以计算,还可以进行三元表达式判断。

<div>{{1+2+3}}</div>

<div>{{num<10?num:0+num }}</div>

data:{

num:3

}

代码展示如下:

<body>
    <div id="app">
        <p v-text="username"></p>
        <p v-text="gender">性别</p>
        <hr>
        <p>姓名:{{username}}</p>
        <p>性别:{{gender}}</p>
        <hr>
        <p>{{info}}</p>
        <p v-text="info"></p>
        <p v-html="info"></p>
    </div>
    <!-- 导入Vue的库文件,在window全局就有了Vue这个构造函数 -->
    <script src="../lib/vue-2.6.12.js"></script>
    <script>
        // 创建Vue的实例对象
        const vm=new Vue({
            el:'#app',//el属性是固定写法
            data:{
                username:'张三',
                gender:'女',
                info:'<h1 style="color:red">欢迎光临</h1>'
            }
        })
    </script>
</body>

2.2、属性绑定指令

在Vue中,可以使用v-bind:指令,为元素的属性动态绑定值
简写是英文的

在使用v-bind属性绑定期间,如果绑定内容需要进行动态拼接,则字符串的外面应该包裹单引号,例如:
  <div :title="'box'+index"> 这是一个div</div>

2.3、动态添加索引值

//box一定要加单引号,然后跟id进行动态拼接:box2
<div :title="'box'+id">这是一个div</div>

//这是data里的数据
data:{
id:2
}

三、事件绑定

---1、v-on:简写@
---2、语法格式:
<button  @click="add"></button>
methods:{
add(){
---如果在方法中要修改data中的数据,可以通过this访问到
this.count+=1
}

3、事件绑定并传参

<button  @click="add(1)"</button>
methods:{
add(n){
---如果在方法中要修改data中的数据,可以通过this访问到
this.count+=n
}

4、$event

<!-- vue提供了内置变量,名字叫$event 他就是原生DoM事件的对象e -->

绑定事件后面传两个参数:

(1)实参

(2)$event  (可以获取事件e)

        <button @click="add(1,$event)">+1</button>  

 // methods的作用,就是定义事件的处理函数
            methods:{
                // add:function(){
                //     console.log('ok')
                // }
                // 简写
                add(n,e){
                    this.count+=n
                    if(this.count %2===0){
                        e.target.style.backgroundColor='red'
                    }
                    else{
                        e.target.style.backgroundColor=''
                    }
                },}

5、事件修饰符

.prevent:阻止默认行为(例如:阻止a链接的跳转,阻止表单的提交等)
<a @click.prevent="xxx”>链接</a>
.stop:阻止事件冒泡
<button  @click.stop="xxx"></button>

.capture 以捕获模式触发当前的事件处理函数

.once 绑定事件只触发一次
.self 只有在event.target是当前元素自身触发事件处理函数

6、按键修饰符

<input @keyup.enter="submit"> //  按下enter键是触发

<input @keyup.esc="clearInput>  //按下esc键触发

四、Vue的双向绑定

v-model 双向数据绑定指令,用来辅助开发者在不操作DOM的前提下,快速获取表单的数据

   <p>{{name}}</p>

  <input   type="text" v-model="name">

 data:{

              name:'张三',

//当用户修改了输入框的内容,data里面的值和插值里面的值都会发生改变

            },

注意:v-bind是单向数据绑定,v-model是双向数据绑定

v-model只能绑定在表单数据里,不能和div,p等元素标签进行绑定

(1)v-model指令的修饰符

五、Vue的渲染

5.1、条件渲染指令

(1)、v-show 的原理是动态为元素添加或移除display:none样式,来实现元素的显示和隐藏
    **如果要频繁的切换元素的显示状态,用v-show性能会更好

      <p v-show="flag">这是v-show指令</p>

(2)、v-if的原理是:每次动态创建或移除元素,来实现元素的显示和隐藏
    **如果刚进入页面的时候,某些元素默认不需要被展示,而后期这个元素很可能也不需要被展示出来,此时v-if性能更好

  <p v-if="flag">这是v-if指令</p>

(3)v-if的配套指令  相当于js里面的if -->else if-->else if-->else

      <div v-if="type==='A'">优秀</div>
      <div v-else-if="type==='B'">良好</div>
      <div v-else-if="type==='C'">一般</div>
      <div v-else>较差</div>

注意:v-else-if指令必须配合v-if指令一起使用,否则他将不会被识别

5.2、列表渲染指令

 注意: 官方建议:只要用到了v-for的指令,那么一定要绑定一个:key属性  而且,尽量把id做为key的值 官方对key的值的类型:字符串或数字类型

 (item,index)第一个参数是data里面的list数据,第二个是索引号
 <tr v-for="(item,index) in list" :title="item.name+index"  :key="item.id">
                <td>{{index}}</td>
                 <script src="../lib/vue-2.6.12.js"></script><td>{{item.id}}</td>
                <td>{{item.name}}</td>
      </tr>
data:{

    list:[
                  {id:0,name:'张三'},
                  {id:1,name:'李斯'},
                  {id:2,name:'张华'},
                  {id:3,name:'王五'}
              ]
}

六、Vue的过滤器

过滤器(Filters)是vue为开发者提供的功能,常用于文本的格式化。过滤器可以用在两个地方:插值表达式和v-bind属性绑定

6.1、私有过滤器

过滤器应该被添加到js表达式的尾部,由“管道符"进行调用

<body>                   //在过滤器中过滤后,最终得到的值是过滤器后面的值
    <div id="app">
        {{message | api}}  //过滤器前面的值是由data里面的数据决定的,后面的值自己随意命名
    </div>
    <script src="../lib/vue-2.6.12.js"></script>
    <script>
        const vm=new Vue({
            el:'#app',
            data:{
                message:'hello world!'
            },
            // 过滤器函数,必须被定义到filters节点之下
            // 过滤器本质是一个函数
            filters:{
                // 在过滤器的形参中,就可以获取到‘管道符’前面待处理的那个值
                api(val){
              //这个是 私有过滤器
            // 字符串有charAt方法,这个方法接收索引值,表示从字符串中把索引对应的字符,获取出来
                    const first=val.charAt(0).toUpperCase()
                    // 字符串的slice方法,可以截取字符串,从指定索引往后截取
                    const other=val.slice(1)
                    const all=first+other
                    return all
                }
            }
        })
    </script>
</body>

过滤器的注意点
1、要定义到filters节点下,本质是一个函数
2、在过滤器函数中,一定要有return值
3、在过滤器的形参中,就可以获取到‘管道符’前面待处理的那个值
4、如果全局过滤器和私有过滤器名字一致,此时按照“就近原则”,调用的是"私有过滤器"


6.2、全局过滤器

在filters节点下定义的过滤器,称为”私有过滤器”,因为它只能在当前vm实例所控的el区域内使用,如果希望在多个vue实例之间共享过滤器,则需要定义一个全局过滤器。

 <div id="app2">
        {{message | api}}
    </div>
  // 定义一个全局过滤器
        Vue.filter('api',function(str){
            const first=str.charAt(0).toUpperCase()
                    // 字符串的slice方法,可以截取字符串,从指定索引往后截取
                    const other=str.slice(1)
                    const all=first+other
                    return all
        })

6.3、多个过滤器的调用

 <div id="app2">
        {{message | api}}
    </div>
    <!-- 连续调用多个过滤器 -->
    <div id="app3">
        {{message | api | maxLength}}
    </div>
    <script src="../lib/vue-2.6.12.js"></script>
    <script>
        // 定义一个全局过滤器
        Vue.filter('api',function(str){
            const first=str.charAt(0).toUpperCase()
                    // 字符串的slice方法,可以截取字符串,从指定索引往后截取
                    const other=str.slice(1)
                    const all=first+other
                    return all
        })
        // 定义控制文本长度的过滤器
        Vue.filter("maxLength",function(str){
            if(str.length<=10) return str
            return str.slice(0,10)+'...'
        })
        const vm=new Vue({
            el:'#app',
            data:{
                message:'hello world!'
            },})
</script>

6.4、过滤器传参

<div id="app3">

        {{message | api | maxLength(3)}}

    </div>

// 定义控制文本长度的过滤器

        Vue.filter("maxLength",function(str,len=10){

            if(str.length<=10) return str

            return str.slice(0,len)+'...'

        })

 const vm=new Vue({

            el:'#app',

            data:{

                message:'hello world!'

            },})

输出结果:hel...  //因为maxLength(3)中是实参是3。

七、Vue的侦听器

watch侦听器:运行开发者监视数据的变化,从而针对数据的变化做特定的操作

7.1、方法格式的侦听器
---缺点1:无法在刚进入页面的时候,自动触发!!!
---缺点2:如果侦听的是一个对象,如果对象中的属性发生了变化,不会触发侦听器!!!

语法格式:

 const vm=new Vue({
            el:'#app',//el属性是固定写法
            data:{
                username:"admin"
            },
            // 所有的侦听器,都应该被定义到watch节点下
           watch:{
                //监听 username值的变化
                // 侦听器本质上是一个函数,要监视哪个数据的变化,就把数据名作为方法名即可
                // 新值在前,旧值在后
                username(newVal,oldVal){
                // console.log(newVal,oldVal);}}

 7.2、对象格式的侦听器
---好处1:可以通过immediate选项,让侦听器自动触发!!!
---好处2:可以通过deep选项,让侦听器深度监听对象中每个属性的变化!!!

const vm=new Vue({
            el:'#app',//el属性是固定写法
            data:{
              info:{
                username:"admin"
              }  
            },
            // 所有的侦听器,都应该被定义到watch节点下
           watch:{
            //    定义对象格式的侦听器
            //   info:{
            // //    侦听器的处理函数
            // handler(newVal,oldVal){
            //     console.log(newVal,oldVal);
            // },
            //开启深度监听,只要对象中任何一个属性变化,都会触发‘对象的侦听器’
                deep:true  (深度监听)  或者  immediate:true (自动触发一次)
            //    }

            // 如果要侦听的是对象的子属性的变化,则必须包含一层单引号
            'info.username'(newVal){
                console.log(newVal);
            }
           }
        })

7.3、监听对象单个属性的变化

八、Vue的计算属性

计算属性:所有的计算属性都要定义到computed节点之下,计算属性在定义的时候,要定义成‘方法格式’
特点:
1.定义的时候,要被定义为“方法”
2.在使用计算属性的时候,当普通的属性使用即可
好处:
1、实现了代码的复用
2、只要计算属性中依赖的数据源变化,则计算属性会自动重新求值

九、Vue中axios的使用

 1、发起GET请求

如果调用某个方法的返回值是Promise实例,则前面可以添加await,
await只能用在被async“修饰”的方法中
//    调用axios方法得到的返回值是Promise对象
document.querySelector('#btn').addEventListener('click',  async  function(){
//解构赋值的时候,使用:进行重命名

---1、调用axios之后,使用async/await进行简化
---2、使用解构赋值,从axios封装的大对象中,把data属性解构出来
---3、把解构出来的data属性,使用冒号进行重命名,一般都重命名为{data:res} 
 const {data:res}=await  axios({
            //  请求方式
            method:'GET',
            // 请求地址
            url:'http://www.liulongvin.top:3006/api/getbooks',
            // URL中的查询参数
         params:{
                id:1

            }
        }).then(function(res){
            console.log(res.data);
        })
}

2、发起POST请求

document.querySelector('#btn').addEventListener('click',  async  function(){
 const {data:res}=await  axios({
            //  请求方式
            method:'POST',
            // 请求地址
            url:'http://www.liulongvin.top:3006/api/getbooks',
            // URL中的查询参数
            data:{
               name:'zs',
	age:18

            }
        }).then(function(res){
            console.log(res.data);
        })
}

注意:axios 专注于数据请求的库

3、全局配置axios

在main.js入口文件中,通过app.config.globalProperties全局挂载axios,示例代码如下:

十、Vue的props的运用

 1、组件的props

props是组件的自定义属性,组件的使用者可以通过props把数据传递到子组件内部供子组件内部进行使用,在封装通用组件的时候,合理的使用props可以极大的提高组件的复用性!

props的作用:父组件通过props向子组件传递要展示的数据。

 注意:props是只读的,程序员不能直接修改props的值,否则会直接报错。想要修改props的值,可以把props的值转存到data中,因为data中的数据是可读可写的!!!

data(){

return{ count:this.init   }}

2、props的default默认值

 3、props的type值类型

4、 props的required必填项校验

    如果组件的某个props是必填项,必须让组件的使用者为其传递属性的值。此时可以通过如下反射光将其设置为必填项:

props:{

init:{

default:0,

type:Number,

required:true   //必填项校验  }  }

5、无法使用未声明的props

6、动态绑定props值 

 7、props的大小写命名

8、Props的校验

指的是:在封装组件时对外界传递过来的props数据进行合法性的校验,从而防止数据不合法的问题。

(1)对象类型的props节点

(2)基础类型的检查

注意:如果某个props属性值的类型不唯一,此时可以通过数组的形式,为其指定多个可能的类型

props:{

PropA:[String ,Number],   //PropA属性的值可以是“字符串”或“数字"

}

(3)自定义验证函数

十一、Vue的样式冲突

1、组件之间的样式冲突问题

默认情况下,写在.vue组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题

解决样式冲入的方法:

 (1)在style样式内部添加 scoped,防止样式冲突。

<style lang="less"  scoped></style>  

(2)/deep/样式穿透

/deep/ .title{  }

或者 :deep(.title){  }   //这个方法是用在vue3中的

(3)[data-v-xxx]

.title[data-v-xxx]

十二、Vue的生命周期

生命周期是指一个组件从创建-->运行-->销毁的整个阶段,强调的是一个时间段

生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值