vue基础教程(思想、生命周期、基础用法)

为什么要学习vue

优点

  • 1-JQ有大量的DOM操作,vue有一个概念虚拟DOM 就是直接去内存中取
  • 2-JQ没有统一模型不方便后期维护,vue是基于mvvm思想 数据统一管理在模型汇总
  • 3-JQ有语法可以提取公共的html或js吗?vue有组件 vue可以减少代码冗余便于后期维护

项目使用

  • 小项目 jq 总共2、3个页面 用vue大材小用,关键得不偿失浪费时间
  • 大项目 vue 后期方便维护 成本高,对技术要求也高(通过上述3点可以看到)
  • 什么是vue:用js写的一个库或框架(因为vue是渐进式框架)
  • 开发项目架构模式:MVC、MVP、MVVM

MVVM***(Vue就是基于这个思想模式写的)

Model模型 - 负责数据处理,
View视图 - 负责显示页面,
ViewModel - 负责监控M数据变化同步到V
在这里插入图片描述
在这里插入图片描述

生命周期

beforeCreate

实例组件刚创建,元素DOM和数据都还没有初始化,暂时不知道能在这个周期里面进行生命操作。

created (可以发送异步请求)**

数据data已经初始化完成,方法也已经可以调用,但是DOM未渲染。有人问了,请求都是异步的,并不会阻碍实例加载。这是我个人水平的问题,这边改正,在这个周期里面,请求因为是异步的,不会阻碍实例加载,除非是那些同步操走才会导致页面空白。这样说来,在这个周期里面进行请求,渲染速度反而会更快。

beforeMount

DOM未完成挂载,数据也初始化完成,但是数据的双向绑定还是显示{{}},这是因为Vue采用了Virtual DOM(虚拟Dom)技术。先占住了一个坑。

mounted (用this.$nextTick(函数)确保完全挂载)**

数据和DOM都完成挂载,在上一个周期占位的数据把值给渲染进去。可以在这边请求,不过created请求会更好一些。这个周期适合执行初始化需要操作DOM的方法。

beforeUpdate

只要是页面数据改变了都会触发,数据更新之前,页面数据还是原来的数据,当你请求赋值一个数据的时候会执行这个周期,如果没有数据改变不执行。

updated

只要是页面数据改变了都会触发,数据更新完毕,页面的数据是更新完成的。beforeUpdate和updated要谨慎使用,因为页面更新数据的时候都会触发,在这里操作数据很影响性能和容易死循环。

beforeDestroy

这个周期是在组件销毁之前执行,在我项目开发中,觉得这个其实有点类似路由钩子beforeRouterLeave,都是在路由离开的时候执行,只不过beforeDestroy无法阻止路由跳转,但是可以做一些路由离开的时候操作,因为这个周期里面还可以使用data和method。比如一个倒计时组件,如果在路由跳转的时候没有清除,这个定时器还是在的,这时候就可以在这个里面清除计时器。

Destroyed

说实在的,我还真的不知道这个周期跟beforeDestroy有什么区别,我在这个周期里面调用data的数据和methods的方法都能调用,所以我会觉得跟beforeDestroy是一样的。

扫描二维码关注公众号,回复: 9410877 查看本文章

基础语法

模板语法(就是将模型中数据在页面展示)

  • 显示原始HTML(模型数据是HTML能够被解析):v-html=”data中的键”\动态参数(标签的属性值动态): v-bind:属性名=”data中的键” 或简写 直接冒号事件:
    v-on:事件类型=”函数名” 或简写 直接@
什么是插值:就是在视图层插入数据
文本:{{ data中的键 }}HTML:v-html=” data中的键 ”
 
指令:名词解释不清,就是写v-开头的语法,vue用来操作数据的
参数动态(标签属性值动态):v-bind:属性名=” data中的键 ” 或简写  去掉v-bidn直接:
事件:v-on:事件类型=”函数名”                               或简写  去掉v-on: 直接@
脚下留心:函数名必须在vm中声明 和 data同级 ,叫methods

列表渲染(循环)

语法分析

v-for="数据  in  data中的键"
v-for="(数据, 索引) in  data中的键"        in 后面可以放函数,数组,对象,数字,
<div v-for="(item, i) in goods">
    {{i}} ---- {{ item.id }} ___ {{ item.title }}
</div>

条件渲染(判断)

语法

v-if=“条件”
v-else-if=“条件”
....
v-else

条件成立显示,条件不成立不显示
div v-if="score >= 90">优秀</div>
<div v-else-if="score >= 80">一般</div>
<div v-else>需要锻炼身体</div>
说明:判断通过v-if和v-show都可以实现
区别:v-if控制DOM    v-show控制css (display:none)

事件

事件源–>事件类型---->事件处理函数

2、语法分析

n 语法: v-on:事件类型=”方法名”
n 简写:@事件类型=”方法名”
<button @click="add">+</button>
<button @click="del">-</button>
<button @click="num = num + 1">+</button>
let vm = new Vue({
    el:"css选择器",
    data:{num:50},
     methods: {
         函数1,函数n
     }
 })

事件修饰符

在这里插入图片描述

按键修饰符

通过vue语法 @事件类型.键盘修饰符=“方法名”

<input
    type="text"
    @keyup.enter="enter"
    @keyup.space="space"
    @keyup.delete="del"
/>

表单输入绑定

2、简介&语法
n 单项绑定:仅模型数据同步到视图(M->V)
双向绑定:不仅仅模型数据同步到视图,当视图数据改变也会同步到(M<=>V)
n 语法:v-model=“data中的键”

购物车小案例:(搜索功能)

<!DOCTYPE html>
<html lang="en">
    <head>
        <title></title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="keywords">
            <p v-for="item in search(keywords)"> {{item}}</p>
        </div>
        <script>
            var vm = new Vue({
                el: '#app',
                data:{
                    carts:[
                    {"id":1,"title":"剃须刀","price":50,"number":2},
                    {"id":2,"title":"方便面","price":30,"number":1},
                    {"id":3,"title":"火腿肠","price":1,"number":10},
                    {"id":4,"title":"黄焖鸡","price":15,"number":1}
                     ],
                     keywords:'',
                     
                },
                methods:{
                    // add(){
                    //     this.names.push(this.name)
                    //     this.name=''
                    // },
                    search(keywords){
                        let cart=[]
                        this.carts.forEach(item=>{
                            if(item.title.indexOf(keywords)!=-1){
                                cart.push(item)
                            }
                        })
                        return cart
                    }
                },
            })

        </script>
    </body>
</html>

预告 : vue组件传值

发布了16 篇原创文章 · 获赞 2 · 访问量 2245

猜你喜欢

转载自blog.csdn.net/qq_42714690/article/details/104507727