目前的业界,js模板引擎百花齐放,按各种原理实现的都有, 唯独之前第一次见到angluar的模板引擎的时候, 觉得眼前一亮 - 这应该就是我设想的。我很喜欢他的这些特性:
我们纵观其他的模板引擎,利用js 的特性来处理的占一部分,然后另外一部分以从其他语言(如php,java,.net等)的模板引擎借鉴之(其实这部分的,比相对用js特性来处理的,又要好些,毕竟通用性强一点)。 虽然各有应用场景,但是就我们设想的未来更大的通用和扩展性来说,觉得angluar 类似的处理模式更方便。
由于我只从表现去看angluar的模板引擎,并未研究他的代码,所以,实现应该还是有比较大的差别的。 这里说的我的模板引擎的特点:
目前只支持部分表达式, if, loop。 if 里只支持 ==, ===, !=, !==, , >= 表达式如下 … 当满足条件时, 表达式才存在, 不满足时, 整行会被过滤掉.
loop 里支持无限嵌套(即可循环套循环) 表达式如下: ….{{a.x}} 其中, a是这个里面的临时变量, 相当于js里的 for (var a in b), 而b则是我们传入的一个object对象.
基本原理如下:
3.2.1. 如果他是上一次递归传递下来的值,则加入到递归替换的对象里。
3.2.2. 否则说明他本身就是本次值,直接替换即可
4.1.1. 相等,则将元素节点替换成相应值。
4.1.2. 不相等,则将该元素节点剔除。
4.2. 不存在,则直接替换成data里的值的内容。示例如下: 假设数据为 { items: [ {a: 1}, {a:2}, {a:3}, {a:4} ] } 方法为 {{item.a}} 结果为 1234 (将去掉我们给设定的那个对象)
对于if { a: 1 } 方法为 123 有且当 a 为 1 时才会显示, 其他不显示 则结果为 123
另外对于对象, 我们支持的判断有 String, Number, Boolean(true|false), Null (null), Undefined (undefined). 权重又右到左 (即如果字符串为 true | false, 则自动判断为布尔值, 其他的类推)。
具体的代码部分,请待续。。。
扫码关注w3ctech微信公众号
共收到0条回复