## 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面試