使用Vue开发网站之路3-slot内容分发实现基础表单,衍生表单

	slot这个东西我一开始还不太好理解,以为之前完全没有那样的思想,就是插槽,占位。这个占位我只知道回调。没想到内容也可以占位。
	我为什么要实现个基础表单,衍生表单呢。一是因为这些表单都有共同点就是都是可选删除,地下都有上一页,写一页,每页标签。
把这些共同点整理到一个基础表单里让我很舒服。第二:我要加深对slot的理解。看看它到底好不好用。
	具体实现方案就是基本组件里面有slot,这个slot有一个name的属性,对应衍生表单的slot。
	例如基础的<slot name="header">这个将会被<div slot="header">这里放置一些搜索或者排序(后续添加)</div>替换。
这里面我碰到了一个问题就是我要动态的生成每页标签。本来是用v-html把实现的每页标签做成计算参数放到paging的div里面,结果浏览器只解析了html,里面的事件vue并没有解析。
这个原因网上说是没有再次编译,但是我持保留意见,因为当我把v-for实现的时候是没问题的。当然v-for里面的参数也是计算参数。这个计算参数其实就是坑爹的属性值。只不过在
标签里面没法获取。

    //基本表格组件,内容由父组件决定
    Vue.component("base-table",{
        props:["totalPage","tableClass"],
        template:'<div><slot name="header"></slot>\
                    <table :class="tableClass">\
                    <slot name="row-th"></slot>\
                    <slot name="row-rd"></slot>\
                    </table>\
                    <div class="down-buttons clearfix"><div class="tab-button" @click="deleteTarget">删除</div><div class="tab-button" @click="lastPageTarget">上一页</div>\
                    <div class="paging"><span v-for="i in pageHtml" @click="jumpToTarget($event)">{{i}}</span></div><div class="tab-button" @click="previousPageTarget">下一页</div></div>\
                    </div>',
        computed:{
            pageHtml:function() {
                return parseInt(this.totalPage);
            }
        },
        methods:{
            deleteTarget:function() {
                this.$emit('deleteAll');
            },
            lastPageTarget:function() {
                this.$emit("lastPage");
            },
            previousPageTarget:function() {
                this.$emit("previousPage");
            },
            jumpToTarget:function(event) {
                this.$emit("jumpTo",event);
            }
        }
    });

//这个是衍生表单

	Vue.component("publish-table",{
		template:'<base-table class="outer-tab" :tableClass="tabClass" :totalPage="total" @deleteAll="deleteAllP" @lastPage="lastPageP" \
					@previousPage="previousPageP" @jumpTo="jumpToP">\
					<div slot="header">这里放置一些搜索或者排序(后续添加)</div>\
					<tr class="pub-tr" slot="row-th"><th>选择</th><th>商品名</th><th>价格</th><th>数量</th></tr>\
					<tr class="pub-tr" slot="row-rd" v-for="item in listProduct.list"><td><input type="checkbox"></input></td><td>{{item.name}}</td><td>{{item.price}}</td><td>{{item.quantity}}</td></tr>\
				  </base-table>',
		data:function() {
			return {
				listProduct:"",
				tabClass:"tab-class"
			}
		},
		computed:{
			total:function(){
				return this.listProduct.total;
			}
		},
		mounted:function() {
			this.listProduct = getProductList()
		},
		methods:{
			deleteAllP:function() {
				alert("deleteAllP");
			},
			lastPageP:function() {
				alert("lastPageP");
			},
			previousPageP:function() {
				alert("previousPageP");
			},
			jumpToP:function() {
				alert("jumpToP");
			}
		}
	});






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值