页签内容使用自定义子组件
为了更好的组织页面代码,提升代码可维护性。开发者可以将页签内容通过自定义子组件
来渲染
关于如何开发子组件详见父子组件通信,本小节仅做简单引入使用
示例代码如下:
<import name="tab-content-item" src="./tabitem"></import>
<template>
<!-- tabs组件 -->
<div class="tutorial-page">
<tabs onchange="onChangeTabIndex">
<tab-bar class="tab-bar">
<text>menu1</text>
<text>menu2</text>
<text>menu3</text>
</tab-bar>
<tab-content class="tab-content">
<tab-content-item index="0" itemdata="{{list[0]}}" current-index="{{currentIndex}}"></tab-content-item>
<tab-content-item index="1" itemdata="{{list[1]}}" current-index="{{currentIndex}}"></tab-content-item>
<tab-content-item index="2" itemdata="{{list[2]}}" current-index="{{currentIndex}}"></tab-content-item>
</tab-content>
</tabs>
</div>
</template>
<style>
.tutorial-page {
flex: 1;
flex-direction: column;
}
.tab-bar {
height: 100px;
border: 0px solid #eeeeee;
border-bottom-width: 1px;
}
.tab-bar text {
flex-grow: 1;
text-align: center;
margin: 10px;
}
.tab-content {
flex: 1;
background-color: #eeeeee;
}
</style>
<script>
export default {
private: {
list: [
{title: 'content1'},
{title: 'content2'},
{title: 'content3'}
],
currentIndex: 0
},
onInit () {
this.$page.setTitleBar({ text: '页签内容使用自定义子组件' })
},
onChangeTabIndex (evt) {
this.currentIndex = evt.index
}
}
</script>
在tabitem.ux
文件中:
<template>
<div class="tab-section">
<text>{{itemdata.title}}</text>
</div>
</template>
<style>
.tab-section {
flex: 1;
flex-direction: column;
justify-content: center;
background-color: #ffffff;
margin: 10px;
}
.tab-section text {
color: #FF0000;
text-align: center;
}
</style>
<script>
export default {
props: [
'index',
'itemdata',
// 驼峰式在赋值时使用-连接
'currentIndex'
],
onInit () {
// 监听属性变化
this.$watch('currentIndex', 'watchCurrentIndex')
},
/**
* 监听用户选择的索引,选中当前时触发业务逻辑
* @param newValue
* @param oldValue
*/
watchCurrentIndex (newValue, oldValue) {
if (parseInt(this.index) === this.currentIndex) {
console.info(`当前用户选择了这个标签:${this.index}, ${newValue}, ${oldValue}`)
}
}
}
</script>