├── LICENSE ├── README.md ├── SUMMARY.md ├── chapter-1 ├── GoingShoppingwithVue.js.md ├── Thumbs.db └── imgs │ ├── 1-1.png │ ├── 1-10.png │ ├── 1-11.png │ ├── 1-12.png │ ├── 1-13.png │ ├── 1-2.png │ ├── 1-3.png │ ├── 1-4.png │ ├── 1-5.png │ ├── 1-6.png │ ├── 1-7.png │ ├── 1-8.png │ ├── 1-9.png │ ├── Thumbs.db │ ├── qr1.png │ └── qr2.png ├── chapter-2 ├── Fundamentals.md └── imgs │ ├── 2-1.png │ ├── 2-10.png │ ├── 2-11.png │ ├── 2-12.png │ ├── 2-13.png │ ├── 2-14.png │ ├── 2-15.png │ ├── 2-16.png │ ├── 2-17.png │ ├── 2-18.png │ ├── 2-19.png │ ├── 2-2.png │ ├── 2-20.png │ ├── 2-21.png │ ├── 2-22.png │ ├── 2-3.png │ ├── 2-4.png │ ├── 2-5.png │ ├── 2-6.png │ ├── 2-7.png │ ├── 2-8.png │ ├── 2-9.png │ └── Thumbs.db ├── chapter-3 ├── Components.md └── imgs │ ├── 3-1.png │ ├── 3-10.png │ ├── 3-11.png │ ├── 3-12.png │ ├── 3-13.png │ ├── 3-2.png │ ├── 3-3.png │ ├── 3-4.png │ ├── 3-5.png │ ├── 3-6.png │ ├── 3-7.png │ ├── 3-8.png │ ├── 3-9.png │ └── Thumbs.db ├── chapter-4 ├── Reactivity.md └── imgs │ ├── 4-1.png │ ├── 4-10.png │ ├── 4-11.png │ ├── 4-12.png │ ├── 4-2.png │ ├── 4-3.png │ ├── 4-4.png │ ├── 4-5.png │ ├── 4-6.png │ ├── 4-7.png │ ├── 4-8.png │ ├── 4-9.png │ └── Thumbs.db ├── chapter-5 ├── Vuex.md └── imgs │ ├── 5-1.png │ ├── 5-2.png │ ├── 5-3.png │ ├── 5-4.png │ ├── 5-5.png │ ├── 5-6.png │ ├── 5-7.png │ ├── 5-8.png │ ├── 5-9.png │ └── Thumbs.db ├── chapter-6 ├── Plugins.md └── imgs │ ├── 6-1.png │ ├── 6-2.png │ ├── 6-3.png │ ├── 6-4.png │ ├── 6-5.png │ ├── 6-6.png │ ├── 6-7.png │ ├── 6-8.png │ └── Thumbs.db ├── chapter-7 ├── Testing.md └── imgs │ ├── 7-1.png │ ├── 7-10.png │ ├── 7-11.png │ ├── 7-2.png │ ├── 7-3.png │ ├── 7-4.png │ ├── 7-5.png │ ├── 7-6.png │ ├── 7-7.png │ ├── 7-8.png │ ├── 7-9.png │ └── Thumbs.db ├── chapter-8 ├── Deploying.md └── imgs │ ├── 8-1.png │ ├── 8-10.png │ ├── 8-11.png │ ├── 8-12.png │ ├── 8-13.png │ ├── 8-14.png │ ├── 8-15.png │ ├── 8-16.png │ ├── 8-17.png │ ├── 8-2.png │ ├── 8-3.png │ ├── 8-4.png │ ├── 8-5.png │ ├── 8-6.png │ ├── 8-7.png │ ├── 8-8.png │ ├── 8-9.png │ ├── 9-1.png │ └── Thumbs.db ├── chapter-9 ├── Next.md └── imgs │ ├── 9-1.png │ ├── 9-2.png │ ├── 9-3.png │ ├── 9-4.png │ ├── 9-5.png │ ├── 9-6.png │ └── Thumbs.db └── last.md /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | 本书来自 Olga Filipova -- [Learning Vue.js 2](https://www.packtpub.com/web-development/learning-vuejs-2) 4 | 5 | 感谢 Olga Filipova 女士带我们走进 Vue 的世界。 6 | 7 | 虽是俺翻译的但与俺无任何利益关系。 因涉及版权问题, 此书只供学习交流, 禁止任何转载。 8 | 9 | 本来是自己看完罢了的, 但越看越觉得详尽有趣同时也佩服 Olga Filipova 女士循循善诱的讲解风格。 俺对以前很多模糊的概念有了新的认识, 便萌生了翻译过来分享给大家的想法。 10 | 11 | 众所周知 Vue 官方文档已是非常之详尽了, 但文档毕竟是文档, 系统性远不如书籍。 此书从 Vue.js 的创建历史开始, 经历 Vue.js 基础, 组件系统, 响应式数据绑定, Vuex 架构, 插件, 单元测试, 集成测试, Travis 持续集成, 方程式部署几大板块。 围绕两个基本的方程式贯穿 Vue 的方方面面, 以一种俯瞰的姿态带你畅游 Vue。 12 | 13 | > [gitbook 电子书](https://www.gitbook.com/book/hiscc/vue-js-2-0/details) 14 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | * [Introduction](README.md) 4 | * [简介](chapter-1/GoingShoppingwithVue.js.md) 5 | * [基础](chapter-2/Fundamentals.md) 6 | * [组件](chapter-3/Components.md) 7 | * [响应式](chapter-4/Reactivity.md) 8 | * [Vuex](chapter-5/Vuex.md) 9 | * [插件](chapter-6/Plugins.md) 10 | * [测试](chapter-7/Testing.md) 11 | * [部署](chapter-8/Deploying.md) 12 | * [下一步](chapter-9/Next.md) 13 | -------------------------------------------------------------------------------- /chapter-1/GoingShoppingwithVue.js.md: -------------------------------------------------------------------------------- 1 | # Going Shopping with Vue.js 2 | 3 | > "Vue.js is a JavaScript framework for building astonishing web applications. Vue.js is a 4 | JavaScript library for creating web interfaces. Vue.js is a tool that leverages the use of 5 | MVVM architecture." 6 | 7 | 这是来自 Jargon 的建议, Vue.js 是一款 JavaScript 库, 它基于数据模型来创建用户界面(Views) http://jargon.js.org/_glossary/VUEJS.md 。 8 | 9 | Vue.js 官方站点( https://vuejs.org/ ) 在几个月前说 Vue.js 像是为现代 web 用户界面创建的响应式组件。 10 | 11 | ![](imgs/1-1.png) 12 | 13 | 现在说 Vue.js 是一款渐进式 JavaScript 框架: 14 | 15 | ![](imgs/1-2.png) 16 | 17 | 所以 Vue.js 到底是个啥? 框架? 工具? 库? 它能被用于构建全栈 web 方程式吗? 还是只能添加一些特殊的功能? 我应该从我最喜欢的框架切换过来吗? 如果是, 又是为什么? 我可以在项目中单独使用它吗? 它能带来什么优势呢? 18 | 19 | 在本章, 我们将试着发现这些问题的答案。 我们将在一些简单的事例里初试 Vue.js 。 20 | 21 | 更多内容如下列表: 22 | 23 | * 学习 Vue.js 到底是什么, 它重要的部分及其的历史 24 | * 学习哪些项目使用 Vue.js 25 | * 用 Vue.js 构建一个简单的购物清单并用 jQuery 完成相应的方程式 26 | * 用 Vue.js 构建番茄钟 27 | * 做一点简单的练习 28 | 29 | ## Vue.js 历史 30 | 31 | 当时 Evan You, Vue.js 的创建者 ( http://evanyou.me/ ), 在 Google Creative 实验室搞一个项目, 它们需要一款制作快速原型而不是大型的 UI 视图的工具。 书写大量重复的 HTML 是很耗时耗资源的, 所以 Evan 开始寻找一些已有的工具。 出乎意料的是, 这里没有一款工具, 库, 或是框架可以很好地制作快速原型! 在那时, Angular 被广泛使用, React.js 才刚刚起步, 像 Backbone.js 这样的 MVC 框架被用于大型方程式。 对于这种需要弹性及轻量级的快速原型项目来说, 这些复杂的框架无法胜任。 32 | 33 | 当你意识到这些东东很酷且不存在时, 你可能自己动手创造它 -- just do it! 34 | 35 | ### 注意 36 | 37 | Vue.js 以制作快速原型工具的身份诞生。 现在它可被用于构建复杂大规模响应式 web 方程式。 38 | 39 | 这就是 Evan 所做的。 他通过简单, 弹性的响应式数据和可重用组件的方式帮助制造快速原型进而创造一个库的故事。 40 | 41 | 就像每个库一样, Vue.js 也不断成长发展, 因此提供了越来越多的功能。 现在, 它提供了一种简单的方式来添加创建插件, 书写和使用混入, 为方程式整体添加自定义行为。 Vue 可以像框架一样以弹性灵活的方式构建 web 方程式。 42 | 43 | ## 关于 Vue.js 最重要的事 44 | 45 | Vue.js 允许你简单绑定你的数据模型给呈现层。 它也允许你在整个方程式内简单地重用组件。 46 | 47 | 在这儿你不需要创建特殊的模型或者集合来注册事件对象。 你不需要遵循一些特别的语法。 你不需要安装无止境的依赖。 48 | 49 | <这三句话都在说谁, 你们知道的!( ̄o ̄) . > 50 | 51 | 你的模型是原生 JavaScript 对象。 它们可以被绑定给任意视图(text, inputtext, classes, attributes 等)。 52 | 53 | 你可以简单地添加 *vue.js* 到你的项目内并使用它。 你还可以使用 *vue-cli* 及 Webpack 和 Browserify 来启动整个项目, 它支持热重载并提供开发者工具。 54 | 55 | ## 我们去采购! 56 | 57 | 我知道你的周末又近了, 你想去杂货店为下周采购一些东东。 除非你记忆力超群, 否则在出发前你一定需要一个购物清单。 你可能已经在使用了一些方程式来这样做了, 但我们为啥不自己也做一个呢? 你觉得我们自己创建设计一个购物清单方程式怎么样? 还等啥, 我们动手吧! 我们来创建自己的购物清单方程式。 这非常简单只需为购物清单构建交互原型。 58 | 59 | 这个方程式允许我们增加删除选项并展示我们的购物列表。 实际上呢, 这和 ToDo 列表有点像。 我们以经典的 HTML + CSS + JS + jQuery 组合来实现它。 我们将使用 Bootstrap 框架来添加一些赏心悦目的样式。 60 | 61 | ## 用 jQuery 实现一个购物清单 62 | 63 | 你的代码可能就像下面的: 64 | 65 | ```html 66 |
67 |

My Shopping List

68 |
69 | 70 | 71 | 73 | 74 |
75 | 100 |
101 | ``` 102 | 103 | 然后是 CSS 代码: 104 | 105 | ```css 106 | .container { 107 | width: 40%; 108 | margin: 20px auto 0px auto; 109 | } 110 | .removed { 111 | color: gray; 112 | } 113 | .removed label { 114 | text-decoration: line-through; 115 | } 116 | ul li { 117 | list-style-type: none; 118 | } 119 | ``` 120 | 121 | 最后是 JavaScript/jQuery 代码: 122 | 123 | ```javascript 124 | $(document).ready(function () { 125 | /** 126 | * Add button click handler 127 | */ 128 | function onAdd() { 129 | var $ul, li, $li, $label, $div, value; 130 | 131 | value = $('.js-new-item').val(); 132 | //validate against empty values 133 | if (value === '') { 134 | return; 135 | } 136 | 137 | $ul = $('ul'); 138 | $li = $('
  • ').appendTo($ul); 139 | $div = $('
    ') 140 | .addClass('checkbox') 141 | .appendTo($li); 142 | $label = $('