Vue组件

组件的引用:

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组件

A跳转到B,B跳转到A,又需要重新让A进行请求,为了解决这个问题,需要用到失活组件<keep-alive></keep-alive>
异步组件引入,

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值