forked from ygs-code/vue
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ddf.html
72 lines (72 loc) · 1.93 KB
/
ddf.html
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<h3>Vue mvvm simple model</h3>
<div id="app">
<h2 v-text="title"></h2>
<p v-text="name"></p>
<input v-model="name">
</div>
<script type="text/javascript">
//function Vue(opt) {
// this.data = opt.data || {};
// this.$el = document.querySelector(opt.el) || document.body;
// var textDom = this.$el.querySelectorAll('[v-text]');
// var modelDom = this.$el.querySelectorAll('[v-model]');
// var self = this;
//
// function observe(data) {
// // 设置开始和递归终止条件
// if (!data || typeof data !== 'object') {
// return;
// }
// // 不能直接使用for循环,避开闭包陷阱
// Object.keys(data).forEach(function (key) {
// defineReactive(data, key, data[key]);
// })
// }
//
// function defineReactive(data, key, val) {
// observe(val); // 递归对象属性到基本类型为止
// Object.defineProperty(data, key, {
// enumerable : true, // 枚举
// configurable: false, // 不可再配置
// get : function () {
// return val;
// },
// set : function (newVal) {
// if (val === newVal) {
// return;
// }
// val = newVal; // setter本身已经做了赋值,val作为一个闭包变量,保存最新值
// model2View();
// },
// })
// }
//
// function model2View() {
// textDom.forEach(function (node) {
// node.innerText = self.data[node.getAttribute('v-text')];
// });
// }
//
// function watch() {
// modelDom.forEach(function (node) {
// //节点上面添加 key事件
// node.addEventListener('keyup', function () {
//
// self.data[node.getAttribute('v-model')] = node.value;
// });
// });
// }
//
// observe(this.data);
// model2View();
// watch();
//}
//
//var vm = new Vue({
// el : '#app',
// data: {
// name : 'Vue',
// title: 'Hello Vue!',
// },
//});
</script>