zoukankan      html  css  js  c++  java
  • vue插件(还真是第一次接触)

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>标签页组件</title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    
    <body>
        <div id="app" v-cloak>
            <tabs v-model="activeKey">
                <pane label="标签1" name="1">
                    标签1的内容
                </pane>
                <pane label="标签2" name="2">
                    标签2的内容
                </pane>
                <pane label="标签3" name="3">
                    标签3的内容
                </pane>
            </tabs>
        </div>
    </body>
    
    </html>
    
    <script src="jquery-3.1.1.js"></script>
    <script src="vue.js"></script>
    
    
    
    <script>
        Vue.component('pane', {
            name: 'pane',
            template: '
                    <div class="pane" v-show="show">
                        <slot></slot>
                    </div>',
            props: {
                name: {
                    type: String
                },
                label: {
                    type: String,
                    default: ''
                }
            },
            data: function() {
                return {
                    show: true
                }
            },
            methods: {
                updateNav() {
                    this.$parent.updateNav();
                }
            },
            watch: {
                lable() {
                    this.updateNav();
                }
            },
            mounted() {
                this.updateNav();
            }
        });
    
    
    
        Vue.component('tabs', {
            template: '
                    <div class="tabs">
                        <div class="tabs-bar">
                            <div :class="tabCls(item)" v-for="(item,index) in navList" @click="handleChange(index)">{{item.label}}</div>
                        </div>
                        <div class="tabs-content">
                            <slot></slot>
                        </div>
                    </div>',
    
            props: {
                value: { //这里用于v-model绑定,好像只能用value,而不能用其他关键字; value 就是动态索引(指定哪一个标签处于活动状态)
                    type: [String, Number]
                }
            },
            data: function() {
                return {
                    currentValue: this.value,
                    navList: []
                }
            },
            methods: {
                tabCls: function(item) {
    
                    var temp_xx = [
                        'tabs-tab', {
                            'tabs-tab-active': item.name === this.currentValue
                        }
                    ];
    
                    //秘诀:将对象转为json字符串
                    //动态类:["tabs-tab",{"tabs-tab-active":true}]
                    temp_xx = JSON.stringify(temp_xx);
                    console.log("动态类:" + temp_xx);
                    return temp_xx;
                },
                getTabs() {
                    return this.$children.filter(function(item) {
                        //console.log(item.$options);
                        //console.log('----------------------');
                        //返回标签的名字是“pane”的子孙
                        return item.$options.name === 'pane';
                    });
                },
                updateNav() {
                    this.navList = [];
                    var _this = this;
    
                    this.getTabs().forEach(function(pane, index) {
                        //console.log('lable:' + pane.label);
                        //console.log('name:' + pane.name);
                        //console.log('-----------');
                        _this.navList.push({
                            label: pane.label,
                            name: pane.name || index
                        });
    
                        if (!pane.name)
                            pane.name = index;
    
                        if (index === 0) {
                            if (!_this.currentValue) {
                                _this.currentValue = pane.name || index;
                            }
                        }
                    });
                    this.updateStatus();
                },
                updateStatus() {
                    var tabs = this.getTabs();
                    //console.log('符合条件的tabs-----------');
                    //console.log(tabs);
    
                    var _this = this;
    
                    //每个标签是否显示,取决于它的变量"show";而变量“show”是否为“true”取决于它的name是否为currentValue
                    tabs.forEach(function(tab) {
                        return tab.show = (tab.name === _this.currentValue);
                    });
                },
                handleChange: function(index) {
    
                    var nav = this.navList[index];
                    var name = nav.name;
                    this.currentValue = name;
                    this.$emit('input', name);
                    this.$emit('on-click', name);
                }
            },
            watch: {
                value: function(val) {
                    this.currentValue = val;
                },
    
                currentValue: function() {
                    this.updateStatus();
                }
            }
        });
    
        var app = new Vue({
            el: '#app',
            data: {
                activeKey: '1'
            }
        });
    </script>
  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/11495444.html
Copyright © 2011-2022 走看看