对其余框架我是佩服,对vue.js我则是爱。我就是一眼看上了vue.js,因而用它作各类东西,反反复复屡次,而后以为有些融会贯通,而后,我稍微细的思量了下,到底vue.js靓丽在哪?html
仍是上案例对比说明。此次的案例,UI看起来是:前端
一个span,两个按钮,点击按钮会让span加1或者减1。它简单到你不须要分心关注,可是由足够说明典型的html场景——就是既有数据呈现也有按钮操做。vue
首先出场的是vanilla.js(vanilla.js的意思是,不使用任何框架) ,代码是这样的:jquery
<div id="app"> <p><span id="count">0</span> <button id="inc">+</button> <button id="dec">-</button> </p> </div> <script> var counter = document.getElementById('count'); var btn1 = document.getElementById('inc'); var btn2 = document.getElementById('dec'); var count = 0; btn1.addEventListener('click',function (){ counter.innerHTML = ++count; } ) btn2.addEventListener('click',function (){ counter.innerHTML = --count; } ) </script>
代码行数却是不算多,可是看起来的感觉是:git
使用了多个DOM API(getElementById,innerHTML)程序员
DOM API设计的复合词太长编程
我偏心简洁的代码,而使用DOM API就构成了一种代码的臭味,让我喜欢不起来。bootstrap
第二个出场的是jquery。我我的认为前端历史上来讲,有几个标志性事件app
微软加入了XMLHttpRequest。今后Ajax技术一发而不可收框架
jquery。简单的Selector,精简的API,令世人只有有jquery,不知道有Vanilla.js
Vue.js等相相似的框架。引入了数据绑定,以及组件技术到前端开发
全部,jquery固然是排的上好的技术了。那么,使用jq,效果如何呢?
<script src="https://code.jquery.com/jquery-3.1.1.js" integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA=" crossorigin="anonymous"></script> <div id="app"> <p><span id="count">0</span> <button id="inc">+</button> <button id="dec">-</button> </p> </div> <script> var count = 0 $('#inc').click(function(){ $("#count").html(++count) }) $('#dec').click(function(){ $("#count").html(--count) }) </script>
分析一下:
jquery的选择器比起原生的更好,即便和querySelector相比也更简洁
使用精简的API替代Vanilla的。好比.html()比起.getElementById()来讲,是要看着舒服点的
然而,内核基本不变:依然是添加EventListener,命令式的取值和修改值,依然你得懂得DOM的节点选择、事件监听、回调函数等。
最后出场的是vue,代码是这样的:
<script src="https://unpkg.com/vue/dist/vue.js"></script> <div id="app"> <p>{{count}} <button @click="inc">+</button> <button @click="dec">-</button> </p> </div> <script> new Vue({ el:'#app', data () { return { count: 0 } }, methods: { inc () { this.count++ }, dec () { this.count-- } } }) </script>
第一感受就是:
规整。数据(data),方法(methods)放置的工工整整,一目了然。它充分的利用js的字面量对象的语法
整个应用接口设计,基本上采用的都是简单。一眼看过去,一个复合词也没有(好比getElementById就是4个复合词)
好处是:
如今,你不须要挂接EventListener,使用@click语法自动绑定事件,使用{{}}自动绑定数据
你不须要DOM的一系列的知识就能够构造此程序;对初学者来讲,这个门槛真是下降太多
Vue.js的优美和简约,来源于声明式编程的理念。就是说我不须要经过一系列的函数调用来完成一件事儿,而是直接声明想要什么事儿。好比:
程序员直接声明{{count}},告诉Vue,此处使用Vue实例中的data对象内的count属性来填充。而不是调用.getElementById,.textContent来设置。
程序员经过@click直接声明点击事件指向位置为Vue实例内对象methods对应的方法。而不是经过调用.addEventListener,传入回调函数的方式来实现事件监听
整个Vue.js的应用接口设计的很是优美,可是能量巨大,作到这一点须要不少功力。这就是我佩服的设计哲学。把麻烦留给本身,让开发者感觉简洁。
做者:刘传君
建立过产品,创过业。好读书,求甚解。
能够经过 1000copy#gmail.com 联系到我
bootstrap小书 https://www.gitbook.com/book/...
http小书 http://www.ituring.com.cn/boo...
Git小书 http://www.ituring.com.cn/boo...