父子组件访问
父访问子
1.this.$children 返回数组
2.this.$refs 返回对象(默认空对象)
<cpn ref='名称'></cpn>
this.$refs.名称
子访问父
1.this.$parent
2.this.$root:访问根组件
插槽slot
1.基本使用:
2.默认值:
3.如果有多个值同时放入组件进行替换,这多个值一起作为替换元素
<body>
<div id="app">
<cpn><button>按钮</button></cpn>
<cpn><i>呵呵</i></cpn>
</div>
<template id='cpn'>
<div>
<h2>我是组件</h2>
<p>我是组件哈哈哈哈</p>
<slot></slot>
</div>
</template>
<script src="vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
},
components: {
cpn: {
template: '#cpn',
}
}
})
</script>
</body>
具名插槽
给插槽取名字,替换时只替换没有名字的,如果想替换有名字的,需要在用来替换的标签中加slot=“名字”
<body>
<div id="app">
<cpn><span>标题</span></cpn>
<cpn><span slot="center">标题</span></cpn>
</div>
<template id="cpn">
<div>
<slot name="left"><span>左边</span></slot>
<slot name="center"><span>中间</span></slot>
<slot name="right"><span>右边</span></slot>
<slot>hhh</slot>
</div>
</template>
<script src="vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
},
components: {
cpn: {
template: '#cpn',
}
}
})
</script>
</body>
作用域插槽
编译作用域:
用v-show,v-for等使用变量时,会看这个变量是在哪个模板里,不会看是在哪个组件
作用域插槽:父组件替换插槽里的标签,但是内容由子组件来提供
<body>
<div id="app">
<cpn></cpn>
<cpn>
<template slot-scope="slot">
<span>{{slot.data.join('-')}}</span>
</template>
</cpn>
<cpn>
<template v-slot="slot">
<span>{{slot.data.join("*")}}</span>
</template>
</cpn>
</div>
<template id="cpn">
<div>
<slot :data='Planguages'>
<ul>
<li v-for='item in Planguages'>{{item}}</li>
</ul>
</slot>
</div>
</template>
<script src="vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
},
components: {
cpn: {
template: "#cpn",
data() {
return {
Planguages: ['JavaScript', 'c++', 'java', 'c#', 'python']
}
}
}
}
})
</script>
</body>