Vue 初体验

学习 Vue

提要

  1. 了解 vue
  2. vue 与其他框架比较
  3. 了解 vue 原理
    • 了解 vue 数据绑定原理
    • 了解 vue 数据劫持
  4. 搞一个 可以实现的小目标,增加 学习兴趣。

    这里我是 慕课网 学习的,慕课网

    自己跟着课程做了一个小项目的同时,尝试变法搞搞

了解Vue

官网介绍:vue 是一套用于构建用户界面的渐进式框架,与其他不同的是,Vue被设计为可以子底向上逐层应用。Vue 的核心库只关注视图层,不仅容易上手,还便于与第三方库或者既有项目整合。另一方面,当与现代化的工具连以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动

我结合听课对vue的理解是可以很简单的让前端只关注业务层,逻辑层,数据等,而不必关心数据如何展现,如何渲染以及如何处理的,感觉和Laravel ThinkPHP 等框架差不多(PHP是世界上最好的语言),只要使用她们提供的API即可。我先搞的微信小程序,在这里应该对 vue 很有帮助,一些数据绑定,事件什么的,都可以相互转化理解。

vue 与其他框架比较

这里摘自 别人的博客 面条请不要欺负汉堡

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 原理

利用 ES5Object.defineProperty 来劫持属性的修改。

利用 观察者模式 来设定,通知绑定的函数。

图示如下:

观察者

实现一个小目标 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 引入 模版中,所有数据都是在组件中操作的,和慕课大神的不是很一样,这样我就能更好的理解组件的使用了。

  1. 理解了 组件中的 props 属性,这个属性决定从上层的那个属性中接受数据,以及使用的时候参数是什么
  2. 在上面代码中,循环是在组件内部进行的,如果组件内部向外发送事件的时候,事件直接写到组件上就行了,这里包括参数也些到组件上,接受部分在组件的 props 上定义
  3. 具体的,组件内部触发组件的事件 delete 事件,所以我把组件的时间绑定到 外部的 del 方法上,这里有助于我理解组件的内外部交互。
  4. 组件绑定事件的时候可以直接传参的,@click="cli(k)" 这样我们就能得到要操作的数据的下标了。

阿杰博客
请先登录后发表评论
  • latest comments
  • 总共0条评论