Vue 单文件原件 — vCheckBox
做东西一向奉行的是致简原则,一定要让使用者简单
这是我在使用 Vue 一段时间后尝试制作的一个小玩意
我希望可以做一堆这样的小玩意,随意组合使用,感觉挺好的
源码在最后
示例:
- html
<input type="checkbox" id="test1"/>
- JavaScript
var test1 = new vCheckBox({
el: "#test1",
data: {
text: "测试多选框"
}
});
- 效果
部分设计思路
template
图片使用base64方式写入css,css写入行内样式
使用template
变量保存默认模版,在extend中{ template: template }
,然后再赋值给全局对象 vCheckBox.template1 = template;
以后可以预制更多不同样式的 template, 在使用中只需要 new vCheckBox( { template : vCheckBox.templateN } )
同样的,如果不想使用任何样式也可以 new vCheckBox( { template : null } )
(function (window) {
if (window == null || window.Vue == null) {
return;
}
var version = "1.1.0.0";
var template = '<div style="......" ....>\
<ins :style="....." style="...background-image: url(data:image/png;base64,iVBORw0KGgoAA......gg==);..."></ins>\
<span style="display: inline-block;*display: inline;*zoom: 1;vertical-align: middle;">{{text}}</span>\
<slot></slot>\
</div>';
var vue = window.Vue;
var vCheckBox = vue.extend({
... ...
template: template
};
vCheckBox.template1 = template;
vCheckBox.version = version;
window.vCheckBox = vCheckBox;
})(window);
作为子组件
当vCheckbox做为子组件使用时,props: ["checked", "text", "disabled"]
三个属性可以由父组件传入;
由于Vue本身的限制,当属于由props传入时则无法被赋值(会变为只读),这个限制可以参考官方文档
所以在data部分需要对prop进行判断
data: function () {
var props = this.$options.propsData;
var data = {
_hover: 0,
_readonly: {
text: props && props.hasOwnProperty("text"),
disabled: props && props.hasOwnProperty("disabled"),
checked: props && props.hasOwnProperty("checked")
}
};
if (!data._readonly.text) {
data.text = "";
}
if (!data._readonly.disabled) {
data.disabled = false;
}
if (!data._readonly.checked) {
data.checked = false;
}
return data;
}
在toggle操作的时也需要注意
methods: {
toggle: function () {
if (this.disabled) {
return;
}
var value = this.checked == null ? false : !this.checked;
if (this.$data._readonly.checked) {
this.onChanged(value);
return;
}
this.checked = value;
},
全选
为了方便在使用时操作全选和判断全选
写了2个独立的函数供调用,可以在判断时指定需要判断的字段的名称field
参数,默认为判断对象的checked
字段
另外checked
状态还提供了额外的半选状态
(常见于全选的部分选中,另外一部分未选中)
半选状态返回null
,不影响true和false的判断 null在if中也会被认为是false,兼容只有2个状态的情况
vCheckBox.checkAll = function (value, objects, field) {
if (typeof value !== "boolean" || objects == null) {
return;
}
if (typeof field !== "string") {
field = "checked";
}
for (var key in objects) {
if (objects.hasOwnProperty(key)) {
var obj = objects[key];
if (obj && obj.hasOwnProperty(field) && obj[field] !== value) {
obj[field] = value;
}
}
}
};
vCheckBox.isCheckAll = function (objects, field) {
if (objects == null) {
return false;
}
if (typeof field !== "string") {
field = "checked";
}
var value = null;
for (var key in objects) {
if (objects.hasOwnProperty(key)) {
var obj = objects[key];
if (obj && obj.hasOwnProperty(field)) {
if (value == null) {
value = obj[field];
} else if (value !== obj[field]) {
return null;
}
}
}
}
return value;
};
Vue 单文件原件 — vCheckBox的更多相关文章
- webpack入坑之旅(五)加载vue单文件组件
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- Vue单文件组件
前面的话 本文将详细介绍Vue单文件组件 概述 在很多 Vue 项目中,使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页 ...
- VUE2 第六天学习--- vue单文件项目构建
阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...
- vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法
vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法 在vue 里面<style scoped></style> 是为了让样式只影响本身自己组件的样式,不改变全 ...
- vue 单文件组件
在很多vue项目中,我们使用vue.component来定义全局组件,紧接着用new Vue({el:'#container'})在每个页面内指定一个容器元素 这种方式在很多中小规模的项目中运作的很好 ...
- vue单文件中引用路径的处理
原文地址:vue单文件中引用路径的处理如有错误,欢迎指正! vue单文件的开发过程中,在单文件模版中可能会涉及到文件路径的处理,比如 <img>, style 中的 background ...
- webpack打包vue单文件组件
一.vue单文件组件 ①文件扩展名为 .vue 的 就是single-file components(单文件组件) ②参考文档:单文件组件 二.webpack加载第三方包 ①项目中,如果需要用到一些第 ...
- ts-loader如何与vue单文件组件衔接
.ts-loader是如何与vue单文件组件衔接作用的 https://github.com/microsoft/TypeScript-Vue-Starter https://www.npmjs.co ...
- 基于VSCode的vue单文件组件模板设置---一次设置,可爽终生
第一步: 第二步: 第三步: 打开vue.json文件后,如果是初次设置,应该如下图所示,绿色注释部分不用管,注意那两个白色大括号 第四步:在大括号内全部粘贴如下代码,保存即可完成vue模板的设置 & ...
随机推荐
- MySQL ERROR 1045 (28000)
mysql ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: YES) 到配置文件my.in ...
- matlab 写文件
fid = fopen('data.txt','w');for oo=1:1:i if mod(oo,10) == 0 fprintf(fid,'%f,%f,\n',sI1(oo),sQ1(oo)); ...
- 微信小程序开发01 --- 微信小程序项目结构介绍
一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...
- python第一周总结
这一周将开启学习python第一周,开始之前学过python但是没有学精,到现在基本快忘记了,只能记住大概什么样子了emmm 作业计算bmi 这周作业为计算bmi,小明身高1.75,体重80.5.请根 ...
- TPshop之邮箱注册配置教程--附加常见问题集合
准备:企业邮箱(开启POP/SMTP功能) 一.步骤教程: 1.登录企业邮箱(QQ邮箱示例) QQ邮箱 POP3:pop.qq.com SMTP:smtp.qq.com SMTP端口号:25 邮箱 ...
- mac抓包工具anyproxy
本文以 mac为代理,ios手机为客户端举例. 文档地址:http://anyproxy.io/ 1.环境配置: 安装 node :参考 https://www.jianshu.com/p/3 ...
- js中的传值和传引用,判断两个数组是否相等
所谓js的中的传值,其实也就是说5种基本数据类型(null,undefind,boolean,number,string) 传引用也就是说的那个引用数据类型,(array和objec) 基本数据类型的 ...
- Codeforces 438E. The Child and Binary Tree 多项式,FFT
原文链接www.cnblogs.com/zhouzhendong/p/CF438E.html 前言 没做过多项式题,来一道入门题试试刀. 题解 设 $a_i$ 表示节点权值和为 $i$ 的二叉树个数, ...
- 线程池ThreadPoolTaskExecutor配置说明
一般实际开发中经常用到多线程,所以需要使用线程池了, ThreadPoolTaskExecutor通常通过XML方式配置,或者通过Executors的工厂方法进行配置. XML方式配置代码如下:交给 ...
- redis对set(无序集合)的相关操作
redis对set类型(无序集合)操作的相关命令以及如何在python使用这些命令 redis对set类型操作的命令: 命令 语法 概述 返回值 Redis Sadd 命令 sadd key memb ...