学习 Vue
提要
- 了解 vue
- vue 与其他框架比较
了解 vue 原理
- 了解 vue 数据绑定原理
- 了解 vue 数据劫持
搞一个 可以实现的小目标,增加 学习兴趣。
这里我是 慕课网 学习的,[慕课网] [mu]
自己跟着课程做了一个小项目的同时,尝试变法搞搞
了解Vue
官网介绍:vue 是一套用于构建用户界面的渐进式框架,与其他不同的是,Vue被设计为可以子底向上逐层应用。Vue 的核心库只关注视图层,不仅容易上手,还便于与第三方库或者既有项目整合。另一方面,当与现代化的工具连以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动
我结合听课对vue的理解是可以很简单的让前端只关注业务层,逻辑层,数据等,而不必关心数据如何展现,如何渲染以及如何处理的,感觉和Laravel ThinkPHP 等框架差不多(PHP是世界上最好的语言),只要使用她们提供的API即可。我先搞的微信小程序,在这里应该对 vue 很有帮助,一些数据绑定,事件什么的,都可以相互转化理解。
vue 与其他框架比较
这里摘自 别人的博客 [面条请不要欺负汉堡
] [gao_xu]
1. 与angularjs的区别
相同点:
- 都支持指令:内置指令和自定义指令。
- 都支持过滤器:内置过滤器和自定义过滤器。
- 都支持双向数据绑定。
- 都不支持低端浏览器。
不同点:
- (1).AngularJS的学习成本高,比如增加了Dependency Injection特性,而Vue.js本身提供的API都比较简单、直观。
- (2).在性能上,AngularJS依赖对数据做脏检查,所以Watcher越多越慢。
- Vue.js使用基于依赖追踪的观察并且使用异步队列更新。所有的数据都是独立触发的。
- 对于庞大的应用来说,这个优化差异还是比较明显的。
2. 与React的区别
相同点:
- react采用特殊的JSX语法,Vue.js在组件开发中也推崇编写.vue特殊文件格式,对文件内容都有一些约定,两者都需要编译后使用。
- 中心思想相同:一切都是组件,组件实例之间可以嵌套。
- 都提供合理的钩子函数,可以让开发者定制化地去处理需求。
- 都不内置列数AJAX,Route等功能到核心包,而是以插件的方式加载。
- 在组件开发中都支持mixins的特性。
不同点:
- React依赖Virtual DOM,而Vue.js使用的是DOM模板。React采用的Virtual DOM会对渲染出来的结果做脏检查。
- Vue.js在模板中提供了指令,过滤器等,可以非常方便,快捷地操作DOM。
Vue 原理
利用 ES5
的 Object.defineProperty
来劫持属性的修改。
利用 观察者模式
来设定,通知绑定的函数。
图示如下:
![观察者] [img]
实现一个小目标 todoList
引入 cdn 版的 vue
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app"> 这里是挂载点
<input type="text" v-model="msg">
<button @click='submit'>提交</button>
<item :list="list" @delete="del"></item>
</div>
<script>
let list = {
props:['list'],
template:'<ul><li v-for="(v,k) of list">{{v}}<span @click="cli(k)">{{k}}</span></li></ul>',
methods:{
cli:function (k){
console.log(k);
// 触发组件的 delete 事件同时传参 k
this.$emit('delete', k);
}
},
};
new Vue({
el:"#app",
components:{
item:list
},
data:{
msg:'',
list:[]
},
methods:{
submit : function () {
console.log(this);
this.list.push(this.msg);
this.msg = '';
},
del:function (k){
this.list.splice(k, 1);
}
}
});
</script>
</body>
</html>
上面代码一些注意
上面代码中我把整个list 引入 模版中,所有数据都是在组件中操作的,和慕课大神的不是很一样,这样我就能更好的理解组件的使用了。
- 理解了 组件中的
props
属性,这个属性决定从上层的那个属性中接受数据,以及使用的时候参数是什么 - 在上面代码中,循环是在组件内部进行的,如果组件内部向外发送事件的时候,事件直接写到组件上就行了,这里包括参数也些到组件上,接受部分在组件的
props
上定义 - 具体的,组件内部触发组件的事件
delete
事件,所以我把组件的时间绑定到 外部的del
方法上,这里有助于我理解组件的内外部交互。 - 组件绑定事件的时候可以直接传参的,
@click="cli(k)"
这样我们就能得到要操作的数据的下标了。
评论已关闭