简书原文

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

第一个在这里vCheckBox

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

演示DEMO

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

演示DEMO3 - 极简模式

示例:

html

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

js

  1. var tabs2 = new vTabs({
  2. el: "#tabs2",
  3. data: {
  4. tabs: [
  5. { text: "html", el: "#tab-1" },
  6. { text: "javascript", el: "#tab-2" },
  7. { text: "其他", disabled: true, el: "#tab-3" }
  8. ]
  9. }
  10. });

设计思路

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

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

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

  1. watch: {
  2. tabs: function(value) {
  3. if (value == null) {
  4. this.tabs = [];
  5. return;
  6. }
  7. if (value.constructor !== Array) {
  8. this.tabs = [value];
  9. return;
  10. }
  11. var id = this.tabFields.id,
  12. el = this.tabFields.el,
  13. text = this.tabFields.text,
  14. disabled = this.tabFields.disabled;
  15. function set(obj, name, value) {
  16. if (typeof name === "string") Vue.set(obj, name, value);
  17. return obj;
  18. }
  19. for (var i = 0; i < value.length; i++) {
  20. var val = value[i];
  21. if (typeof val !== "object") {
  22. val = set({},
  23. text, val);
  24. }
  25. if (!val.hasOwnProperty(id)) {
  26. set(val, id, Math.random().toString());
  27. }
  28. if (!val.hasOwnProperty(disabled)) {
  29. set(val, disabled, false);
  30. }
  31. if (val.hasOwnProperty(el) && typeof val[el] === "string") {
  32. set(val, el, document.querySelector(val[el]));
  33. }
  34. value[i] = val;
  35. }
  36. if (value.length === 0) {
  37. if (this.selectedIndex !== -1) {
  38. this.selectedIndex = -1;
  39. }
  40. } else if (this.selectedIndex < 0 || this.selectedIndex >= value.length) {
  41. this.selectedIndex = 0;
  42. }
  43. },

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

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

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

源码

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. 漫画:一招学会TCP的三次握手和四次挥手

    TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...

  2. Django—第三方引用

    索引 一.富文本编辑器 1.1 在Admin中使用 1.2 自定义使用 1.3 显示 二.全文检索 2.1 创建引擎及索引 2.2 使用 三.发送邮件 一.富文本编辑器 借助富文本编辑器,网站的编辑人 ...

  3. java项目----衣服购买

    执行bat文件:注意t_temp.properties保存的文件是否为utf8编码native2ascii -encoding UTF-8 t_temp.properties r.properties ...

  4. Nuxt.js国际化vue-i18n的搭配使用

    Nuxt.js国际化的前提是,已经使用脚手架工具搭建好了Nuxt.js的开发环境. 我使用的环境是nuxt@2.3 + vuetify@1.4 + vue-i18n@7.3 1. 先安装vue-i18 ...

  5. 洛谷评测机BUG(应该是)

    此问题由洛谷p1746引出(之前出过类似问题没在意) 传送门 以下是两个差不多的程序,(只有main函数中的输入不同,第一个程序迷之WA,第二个程序AC) #include <bits/stdc ...

  6. APP产品设计及运营时常见的问题

    目录 一.APP设计之初必须预埋的功能 二.H5活动页入口设计 三.全套icon /menu icon / logo图,统一后台设置便于活动推广 四.webview与原生页面的路由应统一改善用户体验 ...

  7. Centos7安装zabbix-agent

    1.下载zabbix-agent wget https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.10 ...

  8. 三色GDOI

    前面说点什么.. 翻了翻别人的游记.. 发现自己从来没写过gdoi的游记.. 那就.. 一起写完它吧.. GDOI2015 肇庆 没啥印象,只有复联2的首映.. 那时候真的是什么都不懂.. 就是外出打 ...

  9. 「雅礼集训 2017 Day5」矩阵

    填坑填坑.. 感谢wwt耐心讲解啊.. 如果要看这篇题解建议从上往下读不要跳哦.. 30pts 把$A$和$C$看成$n$个$n$维向量,那$A_i$是否加入到$C_j$中就可以用$B_{i,j}$表 ...

  10. GitLab在centos7上安装和使用

    git的优点 git是分布式的,svn不是 git分布式本地就可以用,可以随便保存各种历史痕迹,不用担心污染服务器,连不上服务器也能提交代码.查看log. GIT分支和SVN的分支不同 分支在SVN中 ...