Vue组件化通讯的实例代码

1. Vue的组成文件(.vue)

分为三部分,分别对应html,js,css

<template></template> <script></script> <style></style>

2. Vue的生命周期函数

beforeCreate() 创建数据之前

created() 创建数据 我们在这里的得到我们在data里面创建的数据

beforeMount() // Dom渲染完成前

mounted() //Dom渲染完成

beforeUpdate() // 更新视图 在beforeUpdate触发时,视图已经更新完成

Updated() //更新数据调用的函数、。

<div> <p>{{msg}}</p> <input type='text' v-model='msg'> </div> var app = new Vue({ el: '#app', data() { return { msg: 1 } }, beforeCreate() { console.log('beforeCreate', this.msg); //beforeCreate undefined console.log('beforeCreate: ', document.getElementsByTagName('p')[0]) //beforeCreate <p>{{msg}}</p> }, created() { // 创建数据 console.log('created', this.msg); //beforeCreate 1 console.log('created: ', document.getElementsByTagName('p')[0]) //beforeCreate <p>{{msg}}</p> // 异步处理得到渲染的dom数据 setTimeout(() => { this.msg = 100 console.log('nextTick', document.getElementsByTagName('p')[0]) }, 100) // nextTick <p>100</p> }, beforeMount() { console.log('beforeMount', this.msg) //beforeMount 1 console.log('beforeMount: ', document.getElementsByTagName('p')[0]) // beforeMount <p>{{msg}}</p> }, mounted() { // 渲染dom console.log('mounted', this.msg) //mounted 1 console.log('mounted: ', document.getElementsByTagName('p')[0]) //mounted <p>1</p> }, beforeUpdate() { console.log('beforeUpdate', this.msg) //beforeUpdate 100 console.log('beforeUpdate: ', document.getElementsByTagName('p')[0]) //beforeUpdate <p>100</p> }, updated() { console.log('updated', this.msg) // updated 1 console.log('updated: ', document.getElementsByTagName('p')[0]) // updated <p>100</p> } })

生命周期参考链接

3. export default

每一个模块都是自己的作用域,相应的属性来处理数据和函数

data(声明数据,可以是函数和属性)

类型:Object | Function

组件只接受函数

// 对象的形式 export default{ data: { a:1 } } // 函数的形式 export default{ data(){ return { a: 1 } } }

methods(一些指令和其他属性的调用方法)

不要用箭头函数来写里面的函数

this指向Vue的实例

export default{ methods: { plus() { this.a++ } } }

1、components (组件化定义)

类型: Object

自定义元素,增加代码的复用性

// 当我们引用一个.vue文件的时候,就像使用这个文件来充当我们主体的一部分 <div> <hello></hello> </div> import hello from './hello.vue' export default { components: { hello } }

2、computed(计算属性)

计算属性的结果会被缓存,依赖的数据发生变化才会重新渲染

注意计算属性和methods,watch的区别

{{this.total}} //[3,4] <button @click='add'>添加数据</button> //点击会更新this.total export default { data: () => ({ a: 1, b: [2,3] }), methods: { add(){ this.b.push(8); } }, computed: { total(){ return this.b.map((item)=>{ return item+this.a }) } } }

watch(监听对应的数据)

键值对。键是我们需要监督的数据,值是相应的回调函数

回调函数接受2个参数,新的值和旧的值(对于数组和对象不会出现旧值,对于简单的数据会出现旧值)

监听对象的内部值变化,需要添加deep:true(数组不用)

// 点击后相应的变化 data(){ return { a: 1, b: [2,4,6], c:{name:'hcc',age:22} } }, methods: { add(){ this.a++ this.b.push(8) this.c.name = 'yx' } }, watch: { b: function(val, oldVal){ console.log('new', val) //[2,4,6,8] console.log('new', oldVal) //[2,4,6,8] }, a: function(val, oldVal){ console.log(val); //2 console.log(oldVal); //1 }, c:{ handler(val){ console.log(val); //{name: 'yx',age: 22} } } },

props(用于接受父组件传来的数据)

规定和接受父组件的数据

单向数据流,子组件不能修改传递过来的数据

对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。

可以规定接受的数据类型和默认值,如果是对象和数组,默认值导出是一个函数

// 父组件 <hello :formParent='num'></hello> //html components: { hello }, data(){ return { num: 3 } } //子组件 //1. 数组规定接受的数据 props: ['hello'] //2. 验证的方式 props:{ hello: Number, hello: [String, Number], hello: { type: Object, default(){ return {message: 'hello'} } } }

v-on和v-emit(子组件向父元素传递数据)

vm.$emit: 子元素向父元素定义讯号和传递数据

this.$emit('规定的讯号名称', '想传递给父元素的数据')

vm.$on: 监听讯号,并触发相应的函数(函数内部不用传参)

@'规定的讯号名称'='调用自己组件的方法并可以接受传递的参数'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfszf.html