简书原文

这是我做了第二个单文件元件

第一个在这里vCheckBox

这次这个叫vTabs,用于操作标签页

演示DEMO

演示DEMO2 - 子组件模式及别名

演示DEMO3 - 极简模式

示例:

html

<div id="tabs2"></div>
<div id="tab-1">1</div>
<div id="tab-2">2</div>
<div id="tab-3">3</div>

js

var tabs2 = new vTabs({
el: "#tabs2",
data: {
tabs: [
{ text: "html", el: "#tab-1" },
{ text: "javascript", el: "#tab-2" },
{ text: "其他", disabled: true, el: "#tab-3" }
]
}
});

设计思路

设计部分几乎和vCheckBox一毛一样:

  1. 提供template供后期拓展
  2. 处理props保证在子组件时的可用
  3. 所有样式内联,保证单文件可用
  4. 提供事件支持(目前仅实现了changed事件stateChangedtabAddedtabRemoved尚不可用)

唯一比较特别的地方就是可以使用极简模式

watch: {
tabs: function(value) {
if (value == null) {
this.tabs = [];
return;
}
if (value.constructor !== Array) {
this.tabs = [value];
return;
}
var id = this.tabFields.id,
el = this.tabFields.el,
text = this.tabFields.text,
disabled = this.tabFields.disabled; function set(obj, name, value) {
if (typeof name === "string") Vue.set(obj, name, value);
return obj;
} for (var i = 0; i < value.length; i++) {
var val = value[i];
if (typeof val !== "object") {
val = set({},
text, val);
}
if (!val.hasOwnProperty(id)) {
set(val, id, Math.random().toString());
}
if (!val.hasOwnProperty(disabled)) {
set(val, disabled, false);
}
if (val.hasOwnProperty(el) && typeof val[el] === "string") {
set(val, el, document.querySelector(val[el]));
}
value[i] = val;
}
if (value.length === 0) {
if (this.selectedIndex !== -1) {
this.selectedIndex = -1;
}
} else if (this.selectedIndex < 0 || this.selectedIndex >= value.length) {
this.selectedIndex = 0;
}
},

观察(watch)tabs的变化,如果只是string就作为text使用,其他属性如果不存在即补全。

由于初始化data时并不会触发watch,所以在created中尝试触发watch

created: function() {
this.tabs = [].concat(this.tabs);
},

源码

GitHub

说明文档过两天有时间再补,顺便吧那3个事件一起实现了,最近睡眠验证不足,睡觉了。。。

Vue 单文件元件 — vTabs的更多相关文章

  1. webpack入坑之旅(五)加载vue单文件组件

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  2. Vue单文件组件

    前面的话 本文将详细介绍Vue单文件组件 概述 在很多 Vue 项目中,使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页 ...

  3. VUE2 第六天学习--- vue单文件项目构建

    阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...

  4. vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法

    vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法 在vue 里面<style scoped></style> 是为了让样式只影响本身自己组件的样式,不改变全 ...

  5. vue 单文件组件

    在很多vue项目中,我们使用vue.component来定义全局组件,紧接着用new Vue({el:'#container'})在每个页面内指定一个容器元素 这种方式在很多中小规模的项目中运作的很好 ...

  6. vue单文件中引用路径的处理

    原文地址:vue单文件中引用路径的处理如有错误,欢迎指正! vue单文件的开发过程中,在单文件模版中可能会涉及到文件路径的处理,比如 <img>, style 中的 background ...

  7. webpack打包vue单文件组件

    一.vue单文件组件 ①文件扩展名为 .vue 的 就是single-file components(单文件组件) ②参考文档:单文件组件 二.webpack加载第三方包 ①项目中,如果需要用到一些第 ...

  8. ts-loader如何与vue单文件组件衔接

    .ts-loader是如何与vue单文件组件衔接作用的 https://github.com/microsoft/TypeScript-Vue-Starter https://www.npmjs.co ...

  9. 基于VSCode的vue单文件组件模板设置---一次设置,可爽终生

    第一步: 第二步: 第三步: 打开vue.json文件后,如果是初次设置,应该如下图所示,绿色注释部分不用管,注意那两个白色大括号 第四步:在大括号内全部粘贴如下代码,保存即可完成vue模板的设置 & ...

随机推荐

  1. Maven Install报错:Perhaps you are running on a JRE rather than a JDK?

    我用的是idea,解决办法是:安装jdk,配置环境变量

  2. json & pickle 模块

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 dump和load 都各自使用一次 py ...

  3. 手把手设计MyBatis

    最近趁热打铁,研究了一下Mybatis.MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码. 本文完成的Mybatis功能比较简单, ...

  4. 使用 Appium 测试微信小程序 Webview

    打开调试功能 通过微信打开debugx5.qq.com,或者直接扫下面二维码   勾选[打开TBS内核Inspector调试功能]   Chrome查看页面元素 手机连接电脑,查看是否连接成功.如下展 ...

  5. springboot 错误求解决

    最近再学习springboot这个好东西,结果给当成白老鼠了,我使用的是idea 2018  来测试  一个简单的界面跳转  ,结果报错了,在网上搜了好半天没搜到相应的解决方案,很头疼,希望哪位大神能 ...

  6. spring boot 集成axis1.4 java.lang.NoClassDefFoundError: Could not initialize class org.apache.axis.client.AxisClient

    pom配置: <dependencies> <dependency> <groupId>org.springframework.boot</groupId&g ...

  7. [转] 使用Node.js实现简易MVC框架

    在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容.单靠静态资源岂能撑得起这些复杂的网站应用,本 ...

  8. Angular Taskmgr 登录

    一.登录module 1.先创建domain文件夹,在里面建一个user.model.ts的user领域对象. export interface User{ id?:string; email:str ...

  9. Linux下system()函数的实现

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types. ...

  10. [POJ1964]City Game (悬线法)

    题意 其实就是BZOJ3039 不过没权限号(粗鄙之语) 同时也是洛谷4147 就是求最大子矩阵然后*3 思路 悬线法 有个博客讲的不错https://blog.csdn.net/u012288458 ...