现在的项目大部分都是前后端分离的模式,作为后端开发者,喜欢用一些成熟的前端框架(如:
layui)方便开发,尤其在前端工程师紧缺的情况下,后端开发者可以容易入手,后来又引入了vue.js使原有的HTML数据渲染和js动态操作更加快捷。但是在一次政府项目中,要求浏览器支持到ie8,这样vue支持的不好,因此将原来的vue写法改成原始jquery写法,为了改动最小化,便写了一个简单js,用于支持模板替换、el表达式解析等功能,我将名字命名为wue.js
1. 支持的模板
v-text标签内文本替换v-value标签中value值替换v-each标签内部节点遍历i-valuev-each使用标签中循环子节点中使用,替换内部子节点value值i-textv-each使用循环子节点中使用,替换内部子节点内文本值i-clickv-each使用循环子节点中使用,为内部子节点添加点击事件e-click标签添加点击事件
2. HTML中模板的使用
页面引入
jquery.min.js和wue.js查看文件wue.js
定义一个wue实例,js标签写在HTML中的body内最底部。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26var vm_app = new Wue({
el:"#app",
data:{
title:"一个案例",
user:{
name:"张三",
age:25
},
menu:[
{"id":"bh1","name":"目录1"},
{"id":"bh2","name":"目录2"},
{"id":"bh3","name":"目录3"},
],
},
methods:{
init:function(){
this.replaceModel();
},
show:function(p){
alert(this.title+"--"+p)
}
}
});
vm_app.init();参数说明:
eldom选择器,限定模板的解析范围data数据定义methods方法定义init页面加载完成后的执行入口方法
页面定义模板
模板均使用在HTML标签的属性中,模板名作为属性名,值中使用
双大括号作为解析对象v-text、v-value写法一样,例如v-text="姓名-",双大括号中的内容,会使用wue实例中data内的值进行解析并替换,双大括号外的内容不解析。e-click定义在属性中,为该标签添加点击事件,事件的函数可以使用多个参数,参数之间用,分隔,可以是变量取值,也可以是其他常量,例如e-click="show(user.name)",e-click="show('这是点击事件')",e-click="sayUser('姓名',user.name,user.id)"。v-each写在循环体元素的父标签上,写法为v-each="m,item in menu"或v-each="m in menu",字母in前后分别为遍历的变量名、被遍历的数据集合,与in分别严格用一个空格隔开,变量名部分可以用,分隔,左侧为数据变量名,右侧为元数据对象,里面包含:索引值index,序号:num,总行数count。内部循环体元素定义时,需要添加隐藏属性
style="display:none",用于循环的 参照模板,它的属性中使用i-text、i-value进行文本和value属性赋值,取值对象则为自定义的循环变量或元数据变量,例如i-text="",i-text="",如果添加点击事件则使用i-click,例如i-click="show(m.id)",i-click="show('我是循环元素的点击事件')",事件的函数定义方式和e-click相同。双括号内表达式支持自定义的函数。函数可以定义在当前wue实例methods中,也可以定义在页面全局window域下。书写方式如:myfun(user.name)
- 使用
wue的实例名,调用init()方法进行初始化,init方法内部为页面加载完成后要执行的逻辑,this.replaceModel()调用时执行模板解析和替换逻辑,replaceModel()方法可以携带一个参数,参数为dom选择器,如replaceModel('#table'),注意该选择器必须在el内部,表示仅解析或替换指定范围的模板。调用该方法根据逻辑需要,放于数据返回并已赋值给wue实例之后,赋值方法如this.resultdata = r.data。
3. 完整案例
1 |
|
页面效果:
