一.ref属性
1. 被用来给元素或子组件注册引用信息(id的替代者)
2. 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
3. 使用方式:
1. 打标识:```
.....
``` 或 `````` 2. 获取:```this.$refs.xxx```
For example:
- <template>
- <div>
- <h1 v-text="msg" ref="title">h1>
- <button ref="btn" @click="showDOM">点我输出上方的DOM元素button>
- <School ref="sch"/>
- div>
- template>
-
- <script>
- //引入School组件
- import School from './components/School'
-
- export default {
- name:'App',
- components:{School},
- data() {
- return {
- msg:'欢迎学习Vue!'
- }
- },
- methods: {
- showDOM(){
- console.log(this.$refs.title) //真实DOM元素
- console.log(this.$refs.btn) //真实DOM元素
- console.log(this.$refs.sch) //School组件的实例对象(vc)
- }
- },
- }
- script>
二.props配置
1. 功能:让组件接收外部传过来的数据
2. 传递数据:```
```
3. 接收数据:
1. 第一种方式(只接收):```props:['name'] ```
2. 第二种方式(限制类型):```props:{name:String}```
3. 第三种方式(限制类型、限制必要性、指定默认值):
```js
props:{
name:{
type:String, //类型
required:true, //必要性
default:'老王' //默认值
}
}
```
> 备注:props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。
Fore example:
student组件:
- <template>
- <div>
- <h1>{{msg}}h1>
- <h2>学生姓名:{{name}}h2>
- <h2>学生性别:{{sex}}h2>
- <h2>学生年龄:{{myAge+1}}h2>
- <button @click="updateAge">尝试修改收到的年龄button>
- div>
- template>
-
- <script>
- export default {
- name:'Student',
- data() {
- console.log(this)
- return {
- msg:'我是一个尚硅谷的学生',
- myAge:this.age
- }
- },
- methods: {
- updateAge(){
- this.myAge++
- }
- },
- //简单声明接收
- // props:['name','age','sex']
-
- //接收的同时对数据进行类型限制
- /* props:{
- name:String,
- age:Number,
- sex:String
- } */
-
- //接收的同时对数据:进行类型限制+默认值的指定+必要性的限制
- props:{
- name:{
- type:String, //name的类型是字符串
- required:true, //name是必要的
- },
- age:{
- type:Number,
- default:99 //默认值
- },
- sex:{
- type:String,
- required:true
- }
- }
- }
- script>
App:
- <template>
- <div>
- <Student name="李四" sex="女" :age="18"/>
- div>
- template>
-
- <script>
- import Student from './components/Student'
-
- export default {
- name:'App',
- components:{Student}
- }
- script>
三.,mixin混入
1. 功能:可以把多个组件共用的配置提取成一个混入对象
2. 使用方式:
第一步定义混合:
```
{
data(){....},
methods:{....}
....
}
```
第二步使用混入:
全局混入:```Vue.mixin(xxx)```
局部混入:```mixins:['xxx'] ```
For example:
student组件:
- <template>
- <div>
- <h2 @click="showName">学生姓名:{{name}}h2>
- <h2>学生性别:{{sex}}h2>
- div>
- template>
-
- <script>
- // import {hunhe,hunhe2} from '../mixin'
-
- export default {
- name:'Student',
- data() {
- return {
- name:'张三',
- sex:'男'
- }
- },
- // mixins:[hunhe,hunhe2]
- }
- script>
school组件:
- <template>
- <div>
- <h2 @click="showName">学校名称:{{name}}h2>
- <h2>学校地址:{{address}}h2>
- div>
- template>
-
- <script>
- //引入一个hunhe
- // import {hunhe,hunhe2} from '../mixin'
-
- export default {
- name:'School',
- data() {
- return {
- name:'尚硅谷',
- address:'北京',
- x:666
- }
- },
- // mixins:[hunhe,hunhe2],
- }
- script>
App.vue:
- <template>
- <div>
- <School/>
- <hr>
- <Student/>
- div>
- template>
-
- <script>
- import School from './components/School'
- import Student from './components/Student'
-
- export default {
- name:'App',
- components:{School,Student}
- }
- script>
混入文件 mixin.js:
- export const hunhe = {
- methods: {
- showName(){
- alert(this.name)
- }
- },
- mounted() {
- console.log('你好啊!')
- },
- }
- export const hunhe2 = {
- data() {
- return {
- x:100,
- y:200
- }
- },
- }