ref属性可以获取DOM元素,被用来给元素或子组件注册引用信息(id的替代者)
<h1 v-text='msg' ref='title'>h1>
<script>
methods:{
showDom(){
console.log(this.$refs.title)
}
}
script>
如果给组件添加ref的话拿到的是组件的实例对象(vc)
如果给html标签添加ref的话拿到的是真实的DOM元素
可以通过props把子组件的data传递给父组件
当组件复用,但是里面的属性需要使用不同的数据的时候,可以使用props配置项来实现。
父组件==>子组件 通信
子组件==>父组件 通信(要求父组件先给子组件一个函数)
Student.vue
学生姓名:{{name}}
学生年龄:{{age}}
性别:{{sex}}
App.vue
如果想要传入数字可以使用:age="18"这种v-bind的形式传入,因为v-bind传入的是引号内的内容
注意:
obj.a=12
这种vue不会算作修改obj={x:1,y:2}
这种形式vue会算成修改如果要修改props的数据
学生姓名:{{name}}
学生年龄:{{myAge}}
性别:{{sex}}
两个组件共有的东西可以使用mixin进行混合复用,只需要在mixin中写一遍就行了。
mixin不会破坏你的代码,你的代码中有的mixin中也有那么以你的代码为主。
但是生命周期钩子来说都会使用。
mixin.js
export const mixin1={
methods:{
showName()
{
alert(this.name);
}
}
}
export const mixin2={
x:1,y:2
}
School.vue
学生名称:{{name}}
Student.vue
学生名称:{{name}}
在main.js中进行混合,那么在项目中所有的vc,vm都会得到mixin
//引入mixin
import {mixin1,mixin2} from '../mixin'
Vue.mixin(mixin1)
Vue.mixin(mixin2)
组件中的样式最终会汇总到一起,如果不同组件中有同名样式那么会发生冲突(后引入的会覆盖先引入的)
给style标签添加scoped标签那么就不会产生冲突。
scoped作用原理:给组件中的元素添加一个特殊的标签属性(该属性中的值为随机生成),该标签属性会和样式一起使用。
APP中的样式只有APP可以使用。
school
在组件template标签中使用
Category.vue
<template>
<slot>我是默认值,当使用者没有传递具体结构时我会出现slot>
template>
App.vue
当有多个标签需要插入的时候,这里可以使用具名插槽
Category.vue
App.vue
- xxx
- xxx
你好啊!
当要使用的数据不在App组件,那么可以使用作用域插槽
Category.vue
App.vue
- {{g}}