背景

首先申明,自己并不是前端大神,看过我之前的内容应该晓得,我善于做后端,尽管前端略有涉略,但谈不上精通,连相熟都勉强。写这个系列的目标仅仅只是出于好奇,好奇为何前几年还是JQuery一统天下的前端场面现在为何如此凌乱,好奇好好的js是如何被玩的亲妈都不意识,之所以抉择vue作为切入点,齐全是因为vue简略,根本看下demo就能入门,既然vue作为目前风行的前端三大框架之一,那么只有理解vue是怎么实现的,是不是对前端略微有了一点意识,于是在这种想法的促使下,有了这个系列。

这里模拟vue并不是指我把vue的源码看了一遍,看懂了而后模拟vue写,而是语法还是vue的语法,然而实现我本人想方法实现,当然能够参考vue,但以我前端的程度想齐全看懂vue难度有点大,所以如果你想理解vue源码实现,这个系列不适宜你,但如果你和我一样,略微会点js,又对vue源码无从下手,但又想晓得如何实现跟vue一样的性能,那么就跟着我一起,咱们不看源码,本人推敲实现一个简略的vue。

vue实现todo利用

本系列的思路是,用vue实现一个简略利用,利用中用到vue相干外围性能,而后代码放弃不变,把vue.js文件替换成咱们本人的实现,最终达到和vue一样的成果。这里用vue实现一个超简略的todo利用,代码如下:

<html><head>    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body>    <div id="app">        <input v-model="newTodo"></input>        <button v-on:click="addTodo()">增加</button>        <div>输出的文字:{{newTodo}}</div>        <ul>            <div v-for="(todo,index) in todos" style="margin-bottom: 20px;">                <li style="float: left;margin-right: 20px;">                    {{todo.text}}                </li>                <button v-on:click="deleteTodo(index)">删除</button>            </div>        </ul>    </div>    <script>        var app = new Vue({            el: '#app',            data: {                newTodo: '',                todos: []            },            methods: {                addTodo: function () {                    this.todos.push({ text: this.newTodo });                    this.newTodo = '';                },                deleteTodo: function (index) {                    this.todos.splice(index, 1);                }            }        })    </script></body></html>

成果如下:

  • 输入框值发生变化时,在输入框下方会显示输出的内容(仅仅为了演示成果,疏忽实际意义)
  • 每输出一条新的todo,上面就会多一项列表项
  • 点击列表项左边删除按钮能够删除以后列表项

demo尽管简略,但蕴含了vue所有外围性能

  • 双向值绑定(v-model)
  • 响应式,值发生变化,绑定的节点值也同步变动
  • 事件响应(v-on:click)
  • 循环指令(v-for)

前面的章节,咱们不引入vue.js文件,一步步实现同样的性能。

参考

  • 模拟vue本人入手写响应式框架(一) – Vue实现todo利用
  • 模拟vue本人入手写响应式框架(二) – Vue对象创立