现在的项目大部分都是前后端分离的模式,作为后端开发者,喜欢用一些成熟的前端框架(如:
layui
)方便开发,尤其在前端工程师紧缺的情况下,后端开发者可以容易入手,后来又引入了vue.js
使原有的HTML数据渲染和js
动态操作更加快捷。但是在一次政府项目中,要求浏览器支持到ie8
,这样vue
支持的不好,因此将原来的vue
写法改成原始jquery
写法,为了改动最小化,便写了一个简单js,用于支持模板替换、el表达式解析等功能,我将名字命名为wue.js
1. 支持的模板
v-text
标签内文本替换v-value
标签中value值替换v-each
标签内部节点遍历i-value
v-each
使用标签中循环子节点中使用,替换内部子节点value值i-text
v-each
使用循环子节点中使用,替换内部子节点内文本值i-click
v-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();参数说明:
el
dom选择器,限定模板的解析范围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 |
|
页面效果: