1. 使用vue实例,options入门属性

112 阅读2分钟

1. 原型:

对象.proto === 其构造函数.prototype 【如 var a = new Object,a.proto 和 Object.prototype指向同一内存,内存中有他们的共有属性】

任何函数.proto === Fuction.prototype

Object.proto === null

const vm = new Vue(options) => vm.proto === Vue.prototype

uTools_1684036173279.png

  • 尤雨溪将Vue实例命名为vm
  • vm对象封装了对视图层的酥所有操作,包括数据读写、事件绑定、DOM更新
  • vm的构造函数是Vue,按ES6,vm所属的类是Vue
  • options是new Vue的参数,一般称之为选项构造选项

2. options里有什么

  • 数据:data、props、propsData、computed、methods。match
  • DOM:el、template、render、renderError
  • 生命周期钩子:beforCreate、created、beforeMount、mounted、beforeUpdate、updated、activated、deactiveted、beforeDestroy、destroyed、errorCaptured
  • 资源:directives、filters、components
  • 组合:parent、mixins、extends、provide、inject
  • 其他

PS: 方法method和函数function区别:方法依附于对象,函数相反。如:obj.sayJi()就是方法,sayHi()是函数

uTools_1684074087287.png uTools_1684074054241.png

入门属性:

uTools_1684310997032.png

el - 挂载点,可用$mount代替

el

// main.js
import Vue from 'vue'

console.log(window.Vue)

Vue.config.productionTip = false

import Demo from './Demo.vue'

new Vue({
    el: '#frenk',   // index.html必须与之一致
    render: h => h(Demo)
})

// index.html
<body>
    <div id = "frank"></div>
</body>

$mount

new Vue({
    render: h => h(Demo),
}).$mount('frank')

data(有bug) - 内部数据:支持对象和函数或普通方法

对象写法

new Vue({
    data: {
        n: 0
    },
    template: `
        <div class="red">
            {{n}}
            <button @click="add">+1</button>
        </div>
    `,
    methods: {
        add(){
            this.n += 1
        }
    }
}).$mount('#frank')

函数写法(尽量用这种,因为组件写法只接受function)

data: function(){    // :function可省略
    return {    
        n: 0
    },
}

methods - 方法 (代替filter)

uTools_1684162152379.png 上面的函数操作可用methods代替,由函数filgter()主动调用;methods执行几次就渲染几次 uTools_1684161835798.png

components Vue组件,三种方式引入,推荐第一种

第一种:创建vue文件【注意大小写:文件名可小写(Windows10分不清大小写的文件名),组件名大写】

// main.js
import Demo from './Demo.vue'
const vm = new Vue({
    components: {
        Frank: Demo    
    }
    template: `
        <div class"red">
            <Frank/>
        </div>
    `
}).$mount('#frank')

// Demo.vue
<template>
    <div>Demo</div>
</template>

// 这样写太啰嗦了,直接写成一个不就行:

import Demo from './Demo.vue'
const vm = new Vew({
    components: {Demo}    // 其实是Demo:Demo,ES6简写
    template : `
        <div class"red">
            <Demo/>
        </div>
    `
}).$mount('#frank')

第二种:创一个Vue.component实例

// main.js
Vue.component('Demo2',{
    template: `
        <div>demo222</div>
    `
})
const vm = new Vue({
    template: `
        <div class"red">
            <Demo2/>
        </div> 
    `
}).$mount('#frank')

第三种:结合以上两种

const vm = new Vue({
    component: {
        Frank: {
            template: `
                <div>demo333</div>
            `
        }
    }
    template: `
        <div>
            <Frank/>
        </div>
    `
}).$mount('#frank')

四个钩子

created 实例出现在内存中,未渲染在页面

mounted 实例出现在页面中

updated 实例更新了

destroyed 实例从页面和内存中消失了

Demo.vue

uTools_1684243133180.png uTools_1684243087338.png main.js
【10-13行的components写法可直接换成render渲染,但这个不需要】 uTools_1684241976546.png

设置点击控制组件显示消失,即钩子函数演示消亡。 uTools_1684242904608.png uTools_1684243221282.png

props - 外部属性

Demo.vue

uTools_1684244011942.png

main.js

uTools_1684244067548.png

uTools_1684244093885.png

要分清传的是字符串还是变量/函数 ,变量优先从data找)

字符串【 props = "n" 或者 :props = " 'n' " 】

变量/函数 【 :pros = "n" 】

uTools_1684244930273.png

uTools_1684245015745.png

完整传变量及函数的演示:

uTools_1684252937167.png uTools_1684253191646.png