【Vue2】01 - 基础部分

vue2-基础部分


在这里插入图片描述

一:VUE概述

vue -> 一套用于构建用户界面的渐进式JS框架

所谓渐进式 -> vue可以自底向上逐层的应用,对于简单应用,只需要核心库;对于复杂应用,可以引入各式各样的vue插件

1:vue作者-尤雨溪

在这里插入图片描述

2:vue的特点

采用组件化的模式, 提高代码的复用率,且让代码更好的进行维护

在这里插入图片描述

声明式编码,让编码人员无需直接操作dom,提高开发效率

在这里插入图片描述

使用虚拟DOM + Diff算法,尽量复用DOM节点

在这里插入图片描述

3:需要掌握的前置JS知识

  • ES6语法规范
  • ES6模块化(export & import)
  • 包管理器(npm)
  • 原型,原型链(proto)
  • 数组的常用方法(array…)
  • axios(异步请求)
  • promise(异步方法)

4:Hello Vue

可以在vue的官网上下载对应的安装包(https://v2.cn.vuejs.org/v2/guide/installation.html)

也可以使用cdn加速的网址引入vue(https://cdn.bootcdn.net/ajax/libs/vue/2.6.12/vue.js)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="../js/vue.min.js"></script>
</head>
<body>
<div id="app">
    <h1>{{ message }}</h1>
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data: {
            message: "Hello World"
        }
    })
</script>
</body>
</html>

二:选项式API

每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:

let vm = new Vue({
  // 选项
})

虽然没有完全遵循 MVVM 模型,但是 Vue 的设计也受到了它的启发。

因此,在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示 Vue 实例。

当创建一个 Vue 实例时,你可以传入一个选项对象。

选项对象由数据、DOM、生命周期钩子、资源、组合、以及其它对象组成。

1:el

指定挂载的目标容器,可以是一个css选择器的字符串,也可以是dom HTMLElement实例,只在用new创建实例时生效

在实例挂载之后,元素可以使用vm.$el进行访问

let vm = new Vue({
    el: "#app" // 指定挂载目标是id = app的容器
})

console.log(vm.$el) // ==> div#app对象

2:data

定义数据用的,值必须是一个函数function/object

Vue 将会递归将 data 的 property 转换为 getter/setter,从而让 data 的 property 能够响应数据变化

浏览器 API 创建的原生对象,原型上的 property 会被忽略。实例创建之后,可以通过 vm.$data 访问原始数据对象。

Vue 实例也代理了 data 对象上所有的 property,因此访问 vm.a 等价于访问 vm.$data.a

_$ 开头的 property 不会被 Vue 实例代理,因为它们可能和 Vue 内置的 property、API 方法冲突,你可以使用例如 vm.$data._property 的方式访问这些 property

当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象

通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。如果需要,可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(...)) 得到深拷贝的原始数据对象。

let data = {a: 1}

let vm = new Vue({
    data: data
})

console.log(vm.a)// ==> 1
console.log(vm.$data == data)// ==> true
// Vue.extend() 中 data 必须是函数
let Component = Vue.extend({
    data: function () {
        return {a: 1}
    }
})

// ES6提供了另外一种简写的方式
let Component = Vue.extend({
    data() {
        return {a: 1}
    }
})

3:method

方法在这定义,是一个key=string,值是function的选项

methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。

方法中的 this 自动绑定为 Vue 实例。

注意,不应该使用箭头函数来定义 method 函数。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例

plus: () => this.a++ // this将会是undefined
let vm = new Vue({
    data: {a: 1},
    methods: {
        plus: function () {
            this.a++
        }
    }
})

vm.plus()
console.log(vm.a)// 2
// ES6提供了另外一种简写的方式
let vm = new Vue({
    data: {a: 1},
    methods: {
        plus() {
            this.a++
        }
    }
})

vm.plus()
console.log(vm.a)// 2

4:watch

一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象

Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个 property

同样不要在watch中使用箭头函数,原因和method一样。

let vm = new Vue({
    data: {
        a: 1,
        b: 2,
        c: 3,
        d: 4,
        e: 5,
        f: {
            g: 6
        }
    },
    methods: {
        someMethod: function (newVal, oldVal) {
            console.log("new: %s, old: %s someMethod...", newVal, oldVal)
        }
    },
    watch: {
        // 值可以是方法, 当a发生改变的时候,触发这个函数,两个参数分别是新的值和旧的值
        a: function (newVal, oldVal) {
            console.log("new: %s, old: %s method...", newVal, oldVal)
        },
        // 值可以是方法名,当b发生改变的时候,触发someMethod这个函数
        b: "someMethod",
        
        // 该回调会在任何被侦听的对象的 property 改变时被调用
        // deep:true -> 不论其被嵌套多深
        c: {
            deep: true,
            handler: function (newVal, oldVal) {
                console.log("new: %s, old: %s deep...", newVal, oldVal)
            }
        },
        // 该回调将会在侦听开始之后被立即调用
        // immediate: true -> 立刻被调用
        d: {
            immediate: true,
            handler: function (newVal, oldVal) {
                console.log("new: %s, old: %s immediate...", newVal, oldVal)
            }
        },
        // 你可以传入回调数组,它们会被逐一调用(handler1 -> handler2 -> handler3)
        e: [
            function handle1(newVal, oldVal) {
                console.log("new: %s, old: %s handle1...", newVal, oldVal)
            },
            function handle2(newVal, oldVal) {
                console.log("new: %s, old: %s handle2...", newVal, oldVal)
            },
            function handle3(newVal, oldVal) {
                console.log("new: %s, old: %s handle3...", newVal, oldVal)
            }
        ],
        // 你可以观察一个对象的某一个属性值
        'f.g': function (newVal, oldVal) {
            console.log("new: %s, old: %s f.g...", newVal, oldVal)
        }
    }
})

vm.a = 11
vm.b = 22
vm.c = 33
vm.d = 44
vm.e = 55
vm.f.g = 66

5:computed

计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。

如果你为一个计算属性使用了箭头函数,则 this 不会指向这个组件的实例,但你仍可以将其实例作为函数的第一个参数来访问。

computed: {
  aDouble: vm => vm.a * 2
}

计算属性的结果会被缓存,除非依赖的响应式 property 变化才会重新计算。

注意,如果某个依赖 (比如非响应式 property) 在该实例范畴之外,则计算属性是不会被更新的。

计算属性默认只有 getter,不过在需要时你也可以提供一个 setter。

let vm = new Vue({
    data: {a: 1},
    computed: {
        // 仅读取
        aDouble: function () {
            return this.a * 2
        },
        // 读取和设置
        aPlus: {
            get: function () {
                return this.a + 1
            },
            set: function (v) {
                this.a = v - 1
            }
        }
    }
})

console.log(vm.aPlus)       // => 2
vm.aPlus = 3
console.log(vm.a)           // => 2
console.log(vm.aDouble)     // => 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值