## EJS模板引擎
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javascript" src="../ejs.js"></script>
</head>
<body>
<!-- 模板引擎 -->
<div id="app">
</div>
<script type="text/template" id="tmpl">
<div class="item"><%=text%></div>
</script>
<script type="text/javascript">
var text = 123;
// 获取模板
const tmpl = document.querySelector('#tmpl').innerHTML;
// 把数据和模板绑定到一起,最后生成一个绑定好的html
const html = ejs.render(tmpl, {text});
// 把html填充到页面
document.querySelector('#app').innerHTML = html;
</script>
</body>
</html>
```
<br>
## EJS 循环
```
<script type="text/template" id="tmpl">
<% for(let i = 0; i < list.length; i++){ %>
<div class="item"><%= list[i] %></div>
<% } %>
</script>
```
<br>
## 监听变量
```
var obj = {}
var text = 'abc';
Object.defineProperty(obj, 'text', {
// 获取属性的时候会执行get
get(){
return text;
},
// 给这个属性赋值的时候就会执行set,val是赋的那个值
set(val){
text = val;
console.log('数据修改,页面要更新!');
}
})
obj.text = 123;
```
<br>
<br>
## 监听变量结合EJS刷新页面
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javascript" src="../ejs.js"></script>
</head>
<body>
<!-- 模板引擎 -->
<div id="app">
</div>
<script type="text/template" id="tmpl">
<div class="item"><%=text%></div>
</script>
<script type="text/javascript">
// var obj = {}
// 声明属性方法1
// obj.text = 'abc';
var obj = {}
var text = 'abc';
Object.defineProperty(obj, 'text', {
// 获取属性的时候会执行get
get() {
return text;
},
// 给这个属性赋值的时候就会执行set,val是赋的那个值
set(val) {
text = val;
render();
}
});
render();
// 把数据填充到页面上
function render() {
// 获取模板
const tmpl = document.querySelector('#tmpl').innerHTML;
// 把数据和模板绑定到一起,最后生成一个绑定好的html
const html = ejs.render(tmpl, {
text
});
// 把html填充到页面
document.querySelector('#app').innerHTML = html;
}
</script>
</body>
</html>
```
<br>
## 简单Vue数据绑定实现
```
function Vue(options) {
this.$el = document.querySelector(options.el);
this.$data = options.data;
this.observer(this.$data);
this.render();
}
// 监听数据
Vue.prototype.observer = function(data) {
if(typeof data != 'object'){
return;
}
for(var k in data){
this.defineReactive(k, data[k], data);
};
}
Vue.prototype.defineReactive = function(k, v, data) {
this.observer(v);
Object.defineProperty(data, k, {
get:() => {
return v;
},
set:(val) => {
v = val;
this.render();
}
});
}
Vue.prototype.render = function() {
// 获取模板
const tmpl = document.querySelector('#tmpl').innerHTML;
// 把数据和模板绑定到一起,最后生成一个绑定好的html
const html = ejs.render(tmpl, this.$data);
// 把html填充到页面
document.querySelector('#app').innerHTML = html;
}
```
<br>
### html部分
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script type="text/javascript" src="../ejs.js"></script>
<script type="text/javascript" src="./Vue.js"></script>
<!-- <script type="text/javascript" src="./vue2.min.js"></script> -->
</head>
<body>
<!-- 模板引擎 -->
<div id="app">
</div>
<script type="text/template" id="tmpl">
<div class="item"><%=text%></div>
<div class="item"><%=x.y%></div>
</script>
<script type="text/javascript">
var vm = new Vue({
el:'#app',
data:{
text:'abc',
x:{
y:2
}
}
});
// render();
// 把数据填充到页面上
</script>
</body>
</html>
```
<br>
<br>
- 初级前端题
- 必会
- http协议
- 跨域
- cookie与storage
- 移动端问题
- 性能优化
- Vue全家桶
- 有哪些常用的es6语法?
- 项目
- 闭包
- JSON
- 数据类型与运算
- 数组
- DOM
- 字符串
- 要会
- async与await
- 正则
- this
- 数据加密
- 实时获取数据
- 原生ajax
- 异步打印
- css相关
- 杂七杂八
- webpack
- 一般
- mvvm模式
- 异步请求
- XSS
- 其他dom问题
- 冷门
- 浏览器缓存机制
- 新
- 浏览器事件轮询
- Promise
- 树的深度优先与广度优先
- 拷贝
- 继承
- Vue
- 跨域
- 排序
- 浏览器
- 浏览器入门
- 浏览器内核知识
- 浏览器渲染原理
- 浏览器性能调优
- 自动化构建
- 字符编码
- git
- 一些题目
- 其他
- 逻辑思维题
- 互联网公司招聘信息如何阅读
- bat面试