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

分为三部分,分别对应html,js,css
<template></template> <script></script> <style></style>
2. Vue的生命周期函数
<div id='app'>
<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(一些指令和其他属性的调用方法)
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(计算属性)
{{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(监听对应的数据)
// 点击后相应的变化
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(用于接受父组件传来的数据)
// 父组件
<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: 监听讯号,并触发相应的函数(函数内部不用传参)
@'规定的讯号名称'='调用自己组件的方法并可以接受传递的参数'
// 子组件
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods: {
change(){
this.$emit('sendMsg',this.msg) //把msg传递给父组件
}
}
// 父组件
// 引入子组件,并定义components
components: {
hello
},
methods: {
show(msg){ // 这里接受子组件传递的参数
console.log(msg);
}
}
<hello @sendMsg='show'></hello> // 这里不用传递参数,不然会覆盖子元素传递的参数
ref(用来获取dom和子组件)
// html
<h1 ref="myElement">这是一个dom元素</h1> //dom元素
<hello :propnum="propnum" :obj='d' @getson='getMsg' ref='child'></hello> // 子组件
>-- 组件中this.refs => {myElement: h1, child: VueComponent}
// 运用(在父元素中调用子元素的方法)
// html
<hello ref='child'></hello>
// 子元素hello
methods: {
change() {
this.$emit('getson',this.msg)
this.obj.name = 'yx'
},
drop(el) {
el.style.background = 'red';
}
},
// 父元素
methods: {
add() {
console.log(this.refs); //{child: VueComponent}
this.$refs.child.drop('这里传递父元素的dom节点')
}
}
//如果有一个需求是,一个父元素有2个子组件,其中一个子组件的方法要调用另一个子组件的dom元素
//1. 一个子组件需要向父组件发送元素this.$emit('方法名',dom)
//2. 父元素接受到子组件的传递得到对应dom
//3. 父元素通过this.$refs调用对应的另一个子组件的方法并传入参数
// 子元素hello和world
<div class="world">
<h1 ref="world">这是world的dom元素</h1>
<button @click='send'>给父元素传递dom</button>
</div>
methods: {
send(){
this.$emit('give',this.$refs.world); //给父元素发送dom
}
<div class='hello'>
<button>改变dom</button>
</div>
methods: {
changeDom(target){
console.log(target)
}
}
// 父元素
<world @give='父亲自己的方法'></world>
<hello ref='helloChild'></hello>
methods: {
// 这里接受子元素传递过来的dom元素
'父亲自己的方法'(target) {
this.refs.helloChild.changeDom(target) //调用另一个子元素的方法,并把dom传递过去
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue组件化通讯
# vue组件通讯
# Vue的生命周期一起来看看
# Vue 生命周期和数据共享详解
# 老生常谈vue的生命周期
# Vue3生命周期钩子函数详解
# 浅谈vue的生命周期
# Vue 组件化基本使用详情
# Vue组件化开发思考
# Vue生命周期中的组件化你知道吗
# 自己的
# 是一个
# 回调
# 可以用来
# 默认值
# 都是
# 这是
# 在这里
# 就像
# 周期函数
# 才会
# 这是一个
# 自定义
# 当我们
# 其中一个
# 定了
# 它会
# 并把
# 不要用
# 使用这个
相关文章:
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
香港服务器部署网站为何提示未备案?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何快速搭建自助建站会员专属系统?
如何在建站主机中优化服务器配置?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
文字头像制作网站推荐软件,醒图能自动配文字吗?
建站之星安装路径如何正确选择及配置?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
建站之星如何取消后台验证码生成?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何确认建站备案号应放置的具体位置?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站之星备案是否影响网站上线时间?
家庭建站与云服务器建站,如何选择更优?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
成都网站制作报价公司,成都工业用气开户费用?
如何登录建站主机?访问步骤全解析
如何用已有域名快速搭建网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何打造高效商业网站?建站目的决定转化率
高端建站三要素:定制模板、企业官网与响应式设计优化
临沂网站制作公司有哪些,临沂第四中学官网?
实例解析angularjs的filter过滤器
家具网站制作软件,家具厂怎么跑业务?
如何在橙子建站中快速调整背景颜色?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何在IIS中配置站点IP、端口及主机头?
设计网站制作公司有哪些,制作网页教程?
5种Android数据存储方式汇总
北京网站制作公司哪家好一点,北京租房网站有哪些?
C++如何编写函数模板?(泛型编程入门)
如何基于PHP生成高效IDC网络公司建站源码?
建站之星导航如何优化提升用户体验?
如何通过cPanel快速搭建网站?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
如何在万网自助建站中设置域名及备案?
实例解析Array和String方法
高端网站建设与定制开发一站式解决方案 中企动力
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在自有机房高效搭建专业网站?
如何选择可靠的免备案建站服务器?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
建站VPS能否同时实现高效与安全翻墙?
*请认真填写需求信息,我们会在24小时内与您取得联系。