12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <script>
- import tabContent from './tabContent.nvue'
- export default {
- props: {
- index: {
- type: Number,
- default: 0
- }
- },
- data() {
- return {
- tabIndex: this.index
- }
- },
- components: {
- tabContent,
- },
- render(createElement) {
- const vnodes = this.$slots.default;
- const newVNodes = []
- if (vnodes && vnodes.length) {
- for (let i = 0; i < vnodes.length; i++) {
- let vnode = vnodes[i]
- if (!vnode || !vnode.componentOptions) {
- continue
- }
- if (vnode.componentOptions.tag === 'tab-content') {
- const newVNode = createElement('tab-content', {
- staticClass: vnode.data.staticClass,
- 'class': vnode.data['class'],
- style: vnode.data.style
- }, vnode.componentOptions.children)
- if (!newVNode.data) {
- newVNode.data = Object.create(null)
- }
- if (!newVNode.data.attrs) {
- newVNode.data.attrs = Object.create(null)
- }
- if (!newVNode.data.props) {
- newVNode.data.props = Object.create(null)
- }
- if (!newVNode.data.on) {
- newVNode.data.on = Object.create(null)
- }
- newVNode.data.attrs.index = this.index
- newVNode.data.on.change = this._change
- newVNodes.push(newVNode)
- }
- if (vnode.componentOptions.tag === 'tab-bar') {
- if (!vnode.componentOptions.listeners) { //监听子元素传递过来的事件
- vnode.componentOptions.listeners = Object.create(null)
- }
- vnode.componentOptions.listeners._tabBarClick = this._tabBarClick;
- newVNodes.push(vnode)
- }
- }
- }
- var newNode = createElement('div', {
- style: {
- flex: 1,
- flexDirection: 'column',
- },
- on: {
- change2: this._change2
- }
- }, newVNodes);
- return newNode;
- },
- methods: {
- _tabBarClick(e) {
- this.tabIndex = e.index;
- this.$emit('change', e);
- },
- _change(e) {
- if (this.tabIndex === e.index) {
- return;
- }
- this.tabIndex = e.index;
- this.$emit('change', {
- index: e.index,
- change:true
- })
- }
- }
- }
- </script>
|