组件的引用:
1.引入
需要在App.vue里面引入MyComponent
import MyComponent from “./components/MyComponent”
2.依赖注入
在components对象中,增加components注入组件
3.加载组件
在上面进行引用
所有的js必须放在export default{}中,
必要的元素必须有name属性,首字母大写,
必须有data属性,data必须是纯函数,必须存在返回值,返回值里存储状态,组件的每一次被调用都会创建一个新的组件对象
data(){
return{
}
}
style 有scoped属性:作用域,如果添加了此属性, 则代表当前样式只能在当前组件中生效
组件的复用性
不会有互相的影响
组件的props父传子
在组件标签中加入,比如
:age=“20”,动态类型的prop,在MyComponent中的export default{}中添加props:[“title”,“age”]来读取,在template中添加
{{title}}
props的类型
<script>
props:{
title: String,
age: Number
},
props:{
title: {
type: String,
default:"标题"//在MyComponent中没有写的话会加载这个
}
age: {
type: Number,
require: true //动态的MyComponent标签中不能删掉 :age
}
}
</script>
子传父$emit
在子组件中
<div>
{{title}}
<button @click="sendMessage">
Send
</button>
</div>
<script>
export default{
name:"HelloWorld",
props:{
title:{
type:String,
default:""
},
},
data(){
return{
msg:"welcome to your vue.js App"
}
},
methods:{
SendMessage(){
/*传递两个参数,自定义事件名称,传递的参数(可以接受动态数据)*/
this.$emit("onMyEvent","HelloWorld")
/*接受对应事件和对应的值的处理,对应值可以是动态的,如this.msg*/
}
}
}
}
</script>
然后在父组件
里面写入事件,
<HelloWorld title="hello" @onMyEvent="getMessage"/>
<!--@自定义事件="App里面的事件"-->
<div>{{current}}</div>
...
<script>
export default{
name:"App",
data(){
current:""
},
components:{
HelloWorld
},
methods:{
getMessage(data){
console.log(data)//输出HelloWorld,可以接受动态数据
this.current=data;//将接受的数据传入current
}
}
}
</script>
父传子,插槽 <slot> </slot>
在VueDemo的div里面添加slot标签,就可以读到VueDemo标签里面的标签,
内容传递给VueDemo,内容是显示在VueDemo中,而不是显示在App.vue里面
编译作用域
虽然p标签夹在VueDemo中,但是在编译的时候是显示App.vue里面的内容,
父级模板的内容都在父级作用域编译,子模板的所有内容都是在子作用域中编译
后备内容
如果VueDemo标签里面没有内容,slot标签中有内容,则显示slot标签的内容,
页面显示slot标签的内容
如果VueDemo标签中有内容,则显示标签的内容
这里的msg在父级模板,父级模板的内容都要在父级模板中编译
具名插槽
v-slot只能放在template中
,是个空的不存在的结构,template中的p标签和其他h2h3是同级
代表着VueDemo标签的内容要往VueDemo.vue页面的民为footer的slot插槽中插入
作用域插槽
插槽中可以传递参数
子组件中,slot插槽向上传递内容,
在App.vue中,template标签中接受参数,
{{chuandi.currentData}}
内容在template的v-slot对应名字的对象,然后h1标签读对象的收到的内容也可以写成
dataSlot=""中的内容,要和子组件中的内容一样
插槽缩写,v-slot: 可以写为 #
旧slot-scope ===新v-slot
即把参数之前的所有内容 (v-slot:) 替换为字符 #。例如 v-slot:header 可以被重写为 #header
动态组件
component是内置的组件,
这样可以切换componentA和componentB组件