Vue2笔记

目录

1.创建Vue实例对象

        1.1注:要先引入vue.js文件

        1.2 在main.js中新建vue实例对象

2.阻止生成生产提示

3.模板语法

        3.1插值语法

        3.2指令语法

4.el与data的两种写法

5.数据代理

        5.1什么是数据代理:

        5.2数据代理的作用:

        5.3原理:

6.MVVM模型

 7.事件处理

        7.1绑定事件

         7.2事件修饰符

         7.3键盘事件

 8.计算属性 computed:{}

        8.1定义:要用的属性不存在,要通过已有的属性计算得来

        8.2原理:

        8.3优势:与定义method相比内部有缓存机制(复用)效率更高

9.监视属性 watch

        9.1用法:

        9.2简写:

10.计算属性与监视属性的区别

10.1分别用computed与watch实现展示姓名的案例

11.绑定样式

        11.1class样式绑定:一般用单向数据绑定(:class='')

        11.2style样式绑定:

12.v-show与v-if,v-for

        12.1v-show

        12.2v-if

        12.3v-for

13.key的原理

14.Vue监视数据的原理

14.1vue监视数组数据

14.2Vue.set()

14.3vue监视数据总结:

15.一些指令标签

        15.1v-text,v-html

        15.2v-model收集表单数据

        15.3了解过滤器

        15.4v-clock,v-once,v-pre

        15.5自定义指令

16.Vue的生命周期

17.vue组件 

        17.1使用步骤:        

        17.2 几个注意点:

 18.vm与vc

         18.1vue与vueCompeonent的关系​编辑

         18.2vm与vc的区别

19.vue2脚手架 vue-cli

        19.1安装

        19.2脚手架结构

        19.3修改默认配置           

20.ref与id属性

21.props属性

         22.mixin(混入)

23.插件

24.组件化编码流程

25. webStorage

26.自定义事件

27.全局事件总线

                 27.1作用:实现任意间的组件通信 

        27.2安装和使用:

28.消息订阅与发布

29.vue封装的过渡与动画

30....es6语法使用

31.插槽

        31.1默认插槽

        31.2具名插槽

       31.3作用域插槽

32.vuex

        32.1作用:

        32.2原理图:

        32.3创建并使用store的过程:

        32.4vuex的搭建

        32.5基本使用:

32.6四个map方法:


1.创建Vue实例对象

        1.1注:要先引入vue.js文件

        1.2 在main.js中新建vue实例对象

new vue({
   el:'#root',
   data:{
       name:'尚硅谷',
       
}
})

2.阻止生成生产提示

如果使用的是开发版Vue,Vue 在启动时会生成生产提示

Vue.config.productionTip=false

3.模板语法

        3.1插值语法

    用于标签体内容 ;语法:{{你要动态变化的数据}}

<templete>
    <div>{{name}}<div/>//name是vue对象中data中的数据
<templete/>

        3.2指令语法

        v-bind(简写为:)单向数据绑定,v-model双向数据绑定。。。。

// 示例:创建 Vue 实例,定义数据url,在 a 标签中插值
// 使用 v-bind: 绑定后,就会把里面的语句当成js表达式解析
<a v-bind:href="url">跳转链接</a>     
<a :href="url">跳转链接</a>

        v-model:value 可以简写成 => v-model 。 因为默认收集的是value值

        注意:v-model 只能应用在表单类元素(输入类元素)上

<input type='text' v-model:value="test">
<input type='text' v-model="test">

4.el与data的两种写法

new Vue({
    el:'#root',//第一种在vue实例对象种写
    data:{
        name:'尚硅谷'
}
})

const vm=new Vue({
            data(){//data第二种:返回值函数写法(以后一般使用这种)
                return{
                    name:'第二种指定容器'
                }
            }
        });
        vm.$mount('#root');//第二种写法

在组件中data必须写成函数形式,为了保证组件每次使用都是返回新的数据,而不会改了组件的数据所有使用该组件的地方data都发生改变。

5.数据代理

        5.1什么是数据代理:

        数据代理:一个对象中的数据(属性)用另一个对象进行操作  

        vue中的数据代理:例:vm实例对象中代理data中的数据,直接将data中的属性添加到vm身上

        5.2数据代理的作用:

        让程序员更方便的使用vue实例(vm)中的属性,不用写vm.xxx了

        5.3原理:

        通过Object.defineProperty(),把data对象中的属性添加到vm上,

        并为每个添加地属性指定一个geter和setter,在getter/setter中去操作data中的数据

6.MVVM模型

 7.事件处理

        7.1绑定事件

  通过v-on:xxx='函数‘,或者@(v-on:简写)xxx='函数',xxx是事件名,且事件中的函数一般不用箭头函数,与this指向有关,事件中箭头函数会指向window,而一般函数指向vm.

事件的回调需要配置在methods上,最终会出现在 vm 上注意:methods 中配置的函数不要用箭头函数,不然this就不是 vm 了

// 示例1
<div id='root'>
	<button v-on:click="你要执行的东西">1</button>
	<button @click="你要执行的东西">2</button>

// 示例2 传参。假设点击时执行show()函数
	<button @click="show()">3</button>   // 空时默认传事件对象
	<button @click="show(10,$event)">4</button>   // 空时默认传事件对象
</div>
const vm = new Vue({
    el:'#root',
    methods:{
        show(number,event){
            console.log(number)   // 10
            console.log(event)	  // 事件对象
        }
    }
})

         7.2事件修饰符

         7.3键盘事件

 8.计算属性 computed:{}

        8.1定义:要用的属性不存在,要通过已有的属性计算得来

        8.2原理:

        借助了Object.defineProperty方法提供的getter和setter

        8.3优势:与定义method相比内部有缓存机制(复用)效率更高

        计算属性也采用了数据代理,直接出现在vm身上,可直接读取,如果计算属性要被修改必须去set方法去响应修改

computed:{
    fullName:{
    //当有人调用fullname时,get就会被调用,且返回值就作为fullName的值
    //get什么时候调用?1.第一次读取fullName时,2.所依赖的数据发生变化时
        get(){
                return this.firstName+'-'+this.lastName;
             },
        set(value){//当fullName的值被修改的时候调用
                const arr=value.split('-');
                this.firstName=arr[0];
                this.lastName=arr[1];
                
             },

}

}

computed属性的简写(确定不用set方法时):fullName(){
return XXX;
}

9.监视属性 watch

        9.1用法:

new Vue({
    el:'#root',
    data:{
            isHot:true,
            number:{
                    a:1,
                    b:2
                    }
         },
    watch:{
            isHot:{
                    handler(newValue,oldValue){
                                console.log('isHot被修改了');
                            }
                    }
}
})
'numbers.a':{//监视多级结构中某个属性的变化(不能再简写了)
            handler(){
                console.log('a被修改了');
                
            }
           },
        // 直接监视numbers,要想numbers里任意一个值改变,就监视到
        // 深度监视配置:deep:true

一般的watch只能监视vm身上的属性,(一层),比如上面的number里的a,b属性就无法监视到,必须给watch属性添加配置项:deep:true;


    watch:{
            deep:true,
            number:{
                    handler(newValue,oldValue){
                                console.log('isHot被修改了');
                            }
                    }
}
})

        9.2简写:

与计算属性的简写类似:(当确定不用一些配置项:deep,immdeiate...时)要监视属性名(){}直接当handler使用

isHot(){
    console.log('isHot值被修改了',newValue,oldValue);
}

10.计算属性与监视属性的区别

        1.computed能完成的功能watch都能完成

        2.watch能完成的功能computed不一定能完成例如:watch能进行异步任务,因为计算属性只能靠返回值,而watch是在handler中亲自修改

两个重要的小原则:

1.所被vue管理的函数最好写成普通函数,这样this才能指向vm对象

2.所有不被vue管理的函数(定时器回调,AJAX回调)都要写成箭头函数

10.1分别用computed与watch实现展示姓名的案例

11.绑定样式

        11.1class样式绑定:一般用单向数据绑定(:class='')

''里的值总共三种写法:1.字符串写法;2.数组写法;3.对象写法

        11.2style样式绑定:

:style='',里面的值只能写style已有的属性名才行,css中font-size=>fontSize,没有-的样式照常写,‘’里也可写成对象形式,里面包含多个属性。

12.v-show与v-if,v-for

        12.1v-show

        作用:使用v-show指令语法可以显示/隐藏标签,本质就是给标签加了display:none样式

        12.2v-if

        作用:与v-show类似,也是将标签按条件显示/隐藏,不过v-if是将不符合条件的标签直接删除

        12.3v-for

        作用:遍历标签,多用于li,实现列表的渲染

        注意:使用v-for时必须要添加:key=''属性,一般使用遍历的数组的index,但当遍历的每一项后面有用户要输入的表单元素时会出现问题,key用index不能适用于所有情况,必须给每一项设置一个独有的id属性

        用法:

13.key的原理

 vue中的key有什么作用?

1.虚拟Dom中key的作用:

        key是虚拟Dom对象的标识,当状态中的数据发生变化时,Vue会根据【新数据】生成【新的虚拟Dom】随后vue进行【新的虚拟Dom】与【旧的虚拟Dom】的比较,比较规则如下:

2.对比规则:

        (1)旧的虚拟Dom中找到了与新的虚拟Dom相同的key:

                1.若虚拟Dom中的内容没变,直接使用之前的真实Dom;

                2.若虚拟Dom中的内容发生改变,则生成新的虚拟Dom,随后替换掉页面中的真实Dom

        (2)旧的虚拟Dom中未找到与新的Dom中相同的key:

                创建新的真实Dom放到页面中

3.使用index作为key可能会引发的问题:

        1.若对数据进行:逆序添加,逆序删除等破坏顺序的操作,会产生没有必要的真实Dom更新,页面没问题但是效率低

        2.如果结构中还包含输入类的Dom,会产生错误的Dom更新

4.开发中如何选择key?

        1.最好使用每条数据的唯一标识作为key:定义id,手机号,身份证号,学号等

        2.如果不存在破坏顺序的操作,仅用作页面渲染展示可以使用index

14.Vue监视数据的原理

发现只要是vue实例对象身上的属性(不管多少层 )都能在属性上找到getter和setter方法,vue就是通过getter和setter时刻监视数据的。

原理是通过Object.defineProperty()方法给属性配置对应的get与set方法;那么自己也能实现?

造成栈溢出:

而vue的做法:

vue采用一个构造函数,创建一个实例对象,然后将data中的数据传给构造的对象,最后再将对象赋值给data:

14.1vue监视数组数据

发现问题:vue中数组的每一项没有getter和setter,所以修改数组不能通过索引去改,能改变数据但是无法响应到页面

vue是通过包装数组里的常用方法来实现响应式的:

包装:1.先将Array.prototype.方法 调用,2.再去执行vue实现响应式的操作(生成虚拟Dom,通过key对比,生成新的真实Dom...)

14.2Vue.set()

14.3vue监视数据总结:

15.一些指令标签

        15.1v-text,v-html

        text不能识别标签,html能

        v-html的安全性问题:

        15.2v-model收集表单数据

         

        15.3了解过滤器

        15.4v-clock,v-once,v-pre

v-once指令:指定内容只渲染一次

v-pre:vue不解析,可用于跳过没有使用vue语法的语句用于优化,加快编译 

15.5自定义指令

16.Vue的生命周期

四对生命周期钩子:1.beforeCreate,cteated

                                 2.beforeMount,mounted

                                 3.beforeUpdate,updated

                                 4.beforeDestroy,destroyed

vue生命周期图示:

还有三个生命周期函数但在图中未体现出来:nextTick,active,unactive;  (后面会介绍)

17.vue组件 

        17.1使用步骤:        

        17.2 几个注意点:

        1.组件配置项:name:'组件名'必须写成至少两个单词,有两种方式:1.驼峰命名:MyName;2.my-name;

        2.组件配置中不写el,为什么?

最终所有的组件都要经过一个vm的管理,由vm中的el决定服务于哪个容器

        3.data配置项必须写成函数形式,避免组件复用时,数据存在关联

        4.templete标签里必须有一个根标签,一般用div包裹起来

        5.当使用脚手架时组件标签还可以写为:<school/>,没用脚手架这样写会导致后续组件不能渲染。

 18.vm与vc

         18.1vue与vueCompeonent的关系

 18.2vm与vc的区别

        vm与vc看似一致,vm中有的属性vc身上也有,但是有两点不同:

        1.vm可以用el指定挂载的容器,而vc不能用

        2.vm中data可以写成对象也可以写成方法的形式,但vc只能写成方法,因为vc是可复用的vue实例,写成函数每次都重新生成数据返回,直接写成对象形式的话,如果组件应用在了多处,修改任意一处,其他的数据也会跟着改变。

19.vue2脚手架 vue-cli

        19.1安装

                1.先全局安装:npm install -g @vue/cli

                2.在控制台输入 ‘vue create 项目名称’

                3.npm run serve 运行

        19.2脚手架结构

如图,我创建的是名为vue_text的项目,脚手架创建好的项目包含一些js,json文件,而src文件里是我们主要编写的,public中存放一些资源。

        19.3修改默认配置

使用vue.config.js文件,在里面写配置属性进行修改:

              

 20.ref与id属性

1.ref属性可以给标签添加一个标识,类似id,是vue中的属性;

2.添加到原生html标签上时获取的跟id一致:获取到的是添加该属性的标签;

3.当ref添加到组件标签上时,返回的是组件实例vc,而id返回的是该组件内的所有标签

获取:id:document.getElementByid('XXX');

          ref:因为一般都是在App组件中写this指向App的实例对象vc,this.$refs.XXX

注意:组件的本质是一个vueComponent的构造函数,当组件被vue解析显示时,vue会自动帮我们调用这个构造函数从而创建出vc。

21.props属性

        作用:用于组件间数据的传递;

22.mixin(混入)

作用:可以实现多个组件重复配置项的复用

23.插件

 scoped样式:让样式在局部生效,防止冲突 <style scoped>

24.组件化编码流程

1.实现静态组件:抽取组件,使用组件实现静态页面效果;

2.展示动态数据:(1)数据的类型,名称;

                            (2)数据保存在哪个组件;

3.交互:从绑定事件监听开始

案例中传递数据的注意点:

        1.props适用于:父组件==>子组件通信,子组件==>父组件(父组件要先给子组件一个函数)

        2.使用v-model时要注意:v-model绑定的值不能是props传递过来的值,因为props是不可修改的;

        3.props传过来的是对象类型的值,修改对象中的属性时vue不会报错,但不推荐这样做;

25. webStorage

26.自定义事件

 

27.全局事件总线

        27.1作用:实现任意间的组件通信 

27.2安装和使用:

总结就是:在接收数据的组件上绑定事件$bus.$on,在提供数据的组件去触发事件$bus.$emit; 

28.消息订阅与发布

29.vue封装的过渡与动画

 

30....es6语法使用

 想对info里的属性进行修改,没修改的保留不变:

...this.info会将info内的属性解构出来,...dataObj也同理,然后让两个进行属性对比,重复的以后面的进行覆盖,后面没有的保留前面的。

31.插槽

        31.1默认插槽

使用:子组件的使用者<子组件>自己放入的一些标签<子组件/> ,子组件通过<slot><slog/>来确定使用者写的标签放在slot里面,如果不写slot标签,使用者用以上方式在组件名中间写标签体内容是不会被vue做响应式渲染的;

         31.2具名插槽

 31.3作用域插槽

 

作用域插槽的使用场景:当一个组件想要另一个组件的数据但是自己不允许接收数据,而且能根据使用者对展示数据进行不同的处理时。

 子组件中就写<slot:随便一个名=‘数据名’>

传给的就是slot的使用者,使用者要在结构套templete标签,写上scope='接收的数据',而且不用跟提供数据时的变量名一样随便写。

32.vuex

        32.1作用:

         与全局事件总线类似,也是用于组件间的数据通信,不同于全局事件总线$bus的是:vuex可以实现组件间的数据共享,不用再去绑定事件触发事件了。

        32.2原理图:

32.3创建并使用store的过程:

vuex过程详解: vuex通过actions,mutations,state来实现组件间的数据共享,而且他们三个都要受到store的管理,所以要先创建一个store对象,再在对象里面写它们三个(也是对象)。

创建store:一般在src文件夹下创建store文件夹,在store文件夹下创建index.js文件,在里面创建store对象,通过下载vuex.3(vue2用),导入vuex,使用vuex里的构造函数创建:vuex.Store({actions,mutations,state}),actions,mutations,state都是一个对象,记得在index.js中引入vue,然后使用Vue.use(vuex);这样才不会引起因为在使用store实例之前还没有use vuex的报错:

 

然后在main.js中导入写好的store,在vue实例中配置store属性,让所有的组件都能看到$store属性,各个组件就可以使用this.$store.dispatch来向store中的actions发送请求处理数据了。

32.4vuex的搭建

 

官方是新建Store文件夹下再创建index.js文件

创建store对象 :

然后在main.js中导入写好的store并配置:

 

 

32.5基本使用:

 

32.6四个map方法:

 

持续更新中.... 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值