<!-- /components/xx/index.axml -->
<view onTap="onMyClick" id="c-{{$id}}"/>Component({
methods: {
onMyClick(e) {
console.log(this.is, this.$id);
},
},
});slot。槽位,default slot就是默认槽位,如果调用者在组件标签<xx>之间不传递 axml,则最终会将默认槽位渲染出来。而如果调用者在组件标签<xx>之间传递有 axml,则使用其替代默认槽位,进而组装出最终的 axml 以供渲染。<!-- /components/xx/index.axml -->
<view>
<slot>
<view>default slot & default value</view>
</slot>
<view>other</view>
</view><!-- /pages/index/index.axml -->
<xx />default slot & default value
other<!-- /pages/index/index.axml -->
<xx>
<view>xx</view>
<view>yy</view>
</xx>xx
yy
otherdefault slot显然是不够灵活的,因为它只能传递一份 axml,而如果我们的组件比较复杂的话,我们通常希望可以在不同的位置渲染不同的 axml,这就需要可以传递多个 axml。这就需要named slot了。named slot就是命名槽位,外部调用者可以在自定义组件标签的子标签中指定要将哪一部分的 axml 放入到自定义组件的哪个命名槽位中。而自定义组件标签的子标签中的没有指定命名槽位的部分则会放入到默认槽位上。如果仅仅传递了命名槽位,则会渲染出默认槽位。<!-- /components/xx/index.axml -->
<view>
<slot>
<view>default slot & default value</view>
</slot>
<slot name="header"/>
<view>body</view>
<slot name="footer"/>
</view><!-- /pages/index/index.axml -->
<xx>
<view slot="header">header</view>
<view slot="footer">footer</view>
</xx>default slot & default value
header
body
footer<!-- /pages/index/index.axml -->
<xx>
<view>this is to default slot</view>
<view slot="header">header</view>
<view slot="footer">footer</view>
</xx>this is to default slot
header
body
footer// /components/xx/index.js
Component({
data: {
x: 1,
},
props: {
y: '',
},
});<!-- /components/xx/index.axml -->
<view>component data: {{x}}</view>
<view>page data: {{y}}</view>// /pages/index/index.js
Page({
data: { y: 2 },
});<!-- /pages/index/index.axml -->
<xx y="{{y}}" />component data: 1
page data: 2slot使用外部调用者(比如页面)的axml时,却只能访问到外部调用者的数据。<!-- /components/xx/index.axml -->
<view>
<slot>
<view>default slot & default value</view>
</slot>
<view>body</view>
</view>// /pages/index/index.js
Page({
data: { y: 2 },
});<!-- /pages/index/index.axml -->
<xx>
<view>page data: {{y}}</view>
</xx>page data: 2
body// /components/xx/index.js
Component({
data: {
x: 1,
},
});<!-- /components/xx/index.axml -->
<view>
<slot x="{{x}}">
<view>default slot & default value</view>
</slot>
<view>body</view>
</view>// /pages/index/index.js
Page({
data: { y: 2 },
});<!-- /pages/index/index.axml -->
<xx>
<view slot-scope="props">
<view>component data: {{props.x}}</view>
<view>page data: {{y}}</view>
</view>
</xx>component data: 1
page data: 2
body