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模板的设置 & ...
随机推荐
- java的方法重写 ,多态和关键字 instanceof和final
package cn.pen; /*final 是一个java的关键字,用于修饰局部变量.属性.方法.类,表示最终的意思. final修饰类表示最终类,无法被继承.public final class ...
- SecureCRT标签显示IP地址
当使用SecureCRT连接到linux服务器后,SecureCRT的标签会随着操作目录的改变而改变,当连接多个的时候很不好区分,所以需要设置标签栏固定显示IP地址信息. options->Se ...
- centos6.9 改系统语言成中文简体
1.在root权限下 切换到root下:su root 查看当前语言环境:locale -a (注意中间有空格) 如果看到 zh_CN.UTF-8(这个是中文简体)说明你的系统支持中文语言 2.编辑 ...
- Canvas中如何画一条清晰的线宽为奇数(如1px逻辑像素)的线?
我在开发中使用canvas的机会不是很多,但是第一次实际使用中就遇到了问题,"很久很久以前,我自己画了一个雷达图,线宽都是1像素,但是显示效果不如期望,这才发现canvas中的画线还是有坑的 ...
- 关键字static
原文出处:http://cmsblogs.com/ 『chenssy』 一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Ja ...
- day20.序列化模块
参考云游道士:https://www.cnblogs.com/yyds/p/6563608.html 1.什么是序列化 序列化就是将字典,数字等数据类型转换为字符串数据类型 所说的序列就是字符串 2. ...
- 分布式缓存技术之Redis_01数据结构分析
目录 官网 1. 分布式缓存技术的应用 2. Redis的安装指引 官网 redis.io redisDoc 1. 分布式缓存技术的应用 2. Redis的安装指引 官网下载安装包 redis-5 ...
- Hadoop优化
一.影响MR程序效率的因素 1.计算机性能: CPU.内存.磁盘.网络, 计算机的性能会影响MR程序的速度与效率 2.I/O方面 1)数据倾斜(代码优化) 2)map和reduce数量设置不合理(通过 ...
- python kafka权限校验client.id
kafka集群有权限校验,在连接时需要加入client.id.但pykafka不能配置该选项.搜索了一下,需要使用confluent-kafka 链接: https://blog.csdn.net/l ...
- FlashFXP用到的功能
FlashFXP目前用到的个人理解就是: 一个公共空间 大家同时连接进来可以共享文件进去(该软件支持从屏幕上直接拖拽文件进来) 这里面页面之类的可以用手机进行访问(有利于调试) 第一步接收师哥给的软 ...