We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
<!DOCTYPE html> <html> <head> <script src="//code.jquery.com/jquery-1.9.1.min.js"></script> <meta charset="utf-8"> <title>todo</title> </head> <body> <input type="text" id="input"> <button id="btn-submit">提交</button> <div> <ul id="ul-list"></ul> </div> <script> let $ipt = $('#input') let $sub = $('#btn-submit') let $list = $('#ul-list') $sub.click(() => { let title = $ipt.val() let $li = $('<li>' + title + '</li>') $list.append($li) $ipt.val('') }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <script src="http://vuejs.org/js/vue.js"></script> <meta charset="utf-8"> <title>JS Bin</title> </head> <body> <div id="app"> <input type="text" v-model="title"> <button @click="add">提交</button> <div> <ul> <li v-for="item in list">{{ item }}</li> </ul> </div> </div> <script> new Vue({ el: '#app', data: { title: '', list: [] }, methods: { add () { this.list.push(this.title) this.title = '' } } }) </script> </body> </html>
区别 :
MVC
M -- Model 模型/数据源 V -- View 视图 C -- Controller 控制器 / 控制 view 和 model 的变化
MVVM
// 回顾 Vue todo-list 例子 // 对应 View 视图 模板 (视图和模板是分离的) <div id="app"> <input type="text" v-model="title"> <button @click="add">提交</button> <div> <ul> <li v-for="item in list">{{ item }}</li> </ul> </div> </div> // 对应 Model var data = { title: '', list: [] }, // VM ViewModel Vue实例 事件绑定 数据绑定, 类似于桥梁 new Vue({ el: '#app', data: { title: '', list: [] }, methods: { add () { this.list.push(this.title) this.title = '' } } })
MVVM - Model View ViewModel
ViewModel
View
Model
MVVM 框架的三要素
data
vue
当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性, 并使用 Object.defineProperty 把这些属性全部转为 getter/setter。 这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。
vm
var vm = new Vue({ data:{ a:1 } }) // `vm.a` 是响应的 vm.b = 2 // `vm.b` 是非响应的
Object.defineProperty
Object.defineProperty()
var obj = {a: 1} Object.defineProperty(obj, 'a', { get () { console.log('get') return a }, set (newVal) { console.log('set') a = newVal } }) obj.a = 3
// 模拟实现 var vm = {} var data = { price: 100, name: 'yym' } var key, value for(key in data) { // 闭包, 新建一个函数,保证 key 的独立作用域 (function (key) { Object.defineProperty(vm, key, { get () { return data[key] }, set (newval) { data[key] = newVal } }) })(key) }
v-if v-for
html
JS
render
<div id="app"> <input type="text" v-model="title"> <button @click="add">提交</button> <div> <ul> <li v-for="item in list">{{ item }}</li> </ul> </div> </div>
with 的用法 var obj = { name: 'yym', age: 20, getAdd () { // todo... } } 不使用with function fn1() { alert(obj.name) alert(obj.age) obj.getAdd() } fn1() 使用 with function fn1() { with(obj) { alert(name) alert(age) getAdd() } } fn1()
render函数
<div id="app"> <p>{{price}}</p> </div> <script> new Vue({ el: '#app', data: { price: 100, } }) </script> - 模板中所有信息都包含在render函数中 - this 即 vm - price 即 this.price 即 vm.price, 即 data 中的 price function render () { with(this) { return _c( // createElement 'div', { attrs: {"id": "app"} // 属性 }, [ _c('div',[_v(_s(price))]) ], ) } }
// todo-list 的 render 函数 function render () { with(this) { return _c('div', { attrs: {"id": "app"} }, [ _c('div',[_v(_s(price))]) ], [ _c('input', { directives: [{ name: 'model', rawName:: 'v-model', value: (title), expression: 'title' }], domProps: { "value": (title) }, on: { "input": function($event) { if ($event.target.composing) return title = $event.target.value } } } ) , _v(" "), _c('button', { on: { "click": add } }) // ... ] ) } }
v-model v-for @on
updateComponent
vm._render()
rerender
set
The text was updated successfully, but these errors were encountered:
No branches or pull requests
说一下 jQuery 和 使用框架的区别
区别 :
说一下 MVVM 的理解
MVC
MVVM
MVVM - Model View ViewModel
ViewModel
的理解, 联系View
和Model
MVVM 框架的三要素
1. vue中如何实现响应式
data
属性之后,vue
立刻监听到data
属性被代理到vm
上Object.defineProperty
Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。2. vue 中如何解析模板
v-if v-for
等html
格式很像, 但又很大区别html
来显示JS
代码, 因为 :JS
才能实现 (图灵完备)html
渲染页面, 必须用JS
才能实现JS
函数 (render
函数)render 函数
render函数
3. vue 的整个实现流程
render
函数v-model v-for @on
变成 JS 逻辑Object.defineProperty
data
代理到vm
updateComponent
, 执行vm._render()
data
属性变化, 触发rerender
set
执行updateComponent
updateComponent
, 重新执行vm._render()
The text was updated successfully, but these errors were encountered: