看到最近很火的vue.js,于是开启了自己人生中首篇翻译之路,才意识到这个纯英文版的的确没有中文的通俗易懂~~~~~~不过, 还是硬着头皮把这篇英文版的博客给翻译完了,希望可以帮助自己的同时也方便别人。

原文地址:

http://blog.evanyou.me/2015/10/25/vuejs-re-introduction/

附上vue.js中文文档地址:

http://cn.vuejs.org/
    vue.js是一个web接口的构件库。像其他的工具一样,你也可以称它为“框架”,尽管它更像一种用起来很好的可选工具。如果在这之前,你从来没有听过或者用过vue,你可能想:太好了,又是一个JavaScript框架!这个我理解。结果是它并不是特别新的框架——2014年2月第一次公开发布,而我大概是在两年之前就开始使用其原型。它一直在发展,直到今天已经有很多人开始在工作中使用它了。
因此,vue究竟提供些什么呢?又是什么使得它与众不同?当已经出现Angular、Ember以及React的时候,为什么还有人愿意去学习它呢?接下来的这篇文章就通过短暂的vue的介绍来阐明这些问题,而我也希望在读完这篇文章后你能有自己的答案。 反应:
||在同步中保持状态和视图一直貌似是困难的。是吧?
让我们先从最基本的任务开始吧:显示数据。假设我们有个简单的对象:
 var object = {
message : 'Hello World!';
}

有一个模板:
<div id="example">
{{ message }}
</div>

接下来我们就看一下如何通过vue把数据和模板绑定在一起:
 new Vue({
el : '#example',
data : object
})
    看起来我们只是渲染了一个模板。当对象改变的时候我们应该怎样做来更新视图?答案就是——什么都不做。vue可以转换对象并使它有“活性”。当你设定其他对象的object.message时,呈现的HTML会自动更新。更重要的是,根本没必要担心像 $apply 超时、setState()、监听存储事件或者创建一个私有的框架比如说ko.observable()、Ember.Object.create()等等。它自己就会做这些。

    Vue还提供了完美的计算属性:
 var example = new Vue({
data: {
a:1
},
computed: {
b: function(){
return this.a + 1
}
}
})
//a和b都是实例创建中的变量
example.a // --> 1
example.b // -->2
example.a++
example.b // -->3
    变量b作为a的附属品,它的变化是自动同步的。因为你没有必要自己去声明一个依赖。
另外,基于POJO的反应性使得它非常容易的与任何类型的数据源或者状态连为一体。例如,这里有监测Vue.js组件绑定到RxJS但不超过30行代码。

    组件
||对于小型的demo,这样的数据绑定是整齐的,而对于大的应用程序呢? 当涉及到结构复杂的接口,Vue采用的这种方法类似于React:它的分量。
var example = Vue.extend({
template: '<div>{{ message }}</div>',
data: function(){
return {
message: 'Hello Vue.js!'
}
}
}) //注册了一个example标签
Vue.component('example',Example)
现在我们可以使用其他模板中的组件只是作为一份自定义的元素:

<example></example>

    组件可以包含其他组件,它们可以形成一棵树,代表你的UI。让它们实际上可以自由组合,Vue组件也可以:
1.用props 定义如何从它的父级获取数据;
2.在父级范围内发出自定义事件来触发动作;
3.用<slot>槽构建自己的父级注入相应的内容。 在这里,就不会再继续深入介绍,但是如果你比较感兴趣的话,点击这里http://vuejs.org/guide/components.html 模型
||2015年,我们不应该把一切放在全球范围内。
我们使用模块化工具(Webpack 或者 Browserify)以及ES2015.每一个组件都可以在它自己的模型中使用。由于Vue可以自动的将对象的属性转化为构造器函数,我们可以卡个对象的例子:
  // ComponentA.js
export default {
template: '<div>{{message}}</div>',
data () {
return {
message: 'Hello Vue.js!'
}
}
}


 //App.js
import ComponentA from './ComponentA' export default{
// 在这个范围内,使用另一个组件
//用<component-a>标签将组件A映射进去
components: { ComponentA },
template: -
<div>
<p>Now I'm using another compoment.</p>
<component-a></component-a>
</div>
-
}

   相当不错,对吧?但如果我们可以在同一个文件中封装组件的模板、风格或者是Javascript的逻辑,并为每个得到适当的高亮显示岂不是更好?使用类似于Webpack + vue-loader 或者是 Browserify + vueify,你就可以做到:
<!-- MyComponent.vue -->

<!-- css -->
<style>
.message {
color: red;
}
</style> <!-- template -->
<template>
<div class="message">{{ message }}</div>
</template>

<!-- js -->
<script>
export default {
props: ['message'],
created() {
console.log('MyComponent created!')
}
}
</script>
别急,我们这是重新发明了Web组件吗?但前提是你的CSS文件必须是全局的!
除了:
1.你可以有自己的样式封装。就在<style>标签中添加作用于的属性。但是在它的子组件中是不能嵌套使用的。
2.在IE9之前,每个Vue组件都被编译成一个Javascript模块,而不需要任何的东西支撑它运行。如果你想用的话,也可以把它制定成一个真正的元素。
3.ES2015默认支持<script>标签。
4.你可以在每个语言块中使用任何预处理器。
5.当你使用Webpack + vue-loader,你也可以使用webpack全功率的静态资源处理,因为模板和样式是作为模型依赖通过HTML 以及 CSS 处理URl的。 因此,如果你想要像下面的组件的话:
<vue.js>文件:
这个例子是动态的,我不会做演示……(http://blog.evanyou.me/2015/10/25/vuejs-re-introduction/)

动画 
||我可以用它做些漂亮的东西吗?
vue有一个非常易于使用的内置过渡系统,许多获奖的交互式网站都是使用它来建成的。
Vue的反应体系也使得它非常简单有效的基于状态的渐变,在使用凌乱的检查或者是虚拟的DOM迭代计算时却是相当麻烦的框架。(Vue’s reactivity system also makes it trivially simple to do efficient state-based tweening, which turns out to be quite a hassle in frameworks that use dirty-checking or Virtual DOM diffing.则这句话翻译的实在绕口!)当渐变的状态以每秒60帧的时候,Vue清楚的知道哪个绑定会受到影响,因此它会有效的更新绑定事件的影响以及避免其他应用程序不受到影响。在凌乱的检查和虚拟DOM操作中,改变状态意味着整个子树(作用于或者是组件)都会受到影响。也就是需要重新注册或者是重新呈现。尽管在小demo中个,它被称作“相当快的”,但是在一个大型应用程序中,它并不会触发每秒60次改变的事件。即使它控制的足够快,但是对于整个虚耗的循环它也像是个逐渐消失的电池设备。实际上了解动画的有效。。。。(Check outthis talk to get a sense how much effort is needed to animate things efficiently in React)Vue应用程序也只是在这些默认情况下是被优化的。
一个基于状态渐变的Vue例子:
http://codepen.io/yyx990803/pen/XmZNOG/
路由
  ||如果我想创建一个应用程序,路由又该在哪里设置呢?
类似于React一样,Vue本身并不带路由。但是Vue有一个安装包可以帮你实现。它支持嵌套映射、嵌套组件并且提供细粒度的过渡控制。下面是一个简单的例子:
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './app.vue'
import ViewA from './view-a.vue'
import ViewB from './view-b.vue' Vue.use(VueRouter) const router = new VueRouter() router.map({
'/a': { component: ViewA },
'/b': { component: ViewB }
}) router.start(App, '#app')
app.vue 模板
<div>
<h1>This is the layout that won't change</h1>
<router-view><!-- matched component renders here --></router-view>
</div>
具体的详见:
(https://github.com/vuejs/vue-hackernews)

稳定性  
|| 在一个个人项目中稳定吗?
是的,它是一个个人项目。因此,如果你正在寻找一个在企业开发团队的支持下的,Vue可能就不是你要找的。但是我宁愿看一下这些数字:自从0.11版本后,Vue在每一个提交版本时一直保持在100%的测试覆盖率,而这个速度将一直持续下去。GitHub基本也是在13个小时内解决超过1400的问题,而在撰写文本时,它也是开源(剩下的就都是些数字解释了,因此没有继续翻译……) 因为之前从来没有耐心的看过纯英文版的文档,这次算是首开先河吧,不足之处肯定很多,不喜勿喷,只是以后自己还是得多培养一下,看英文文档的习惯,认真去学新的知识。

vue.js——初体验的更多相关文章

  1. vue.js 初体验— Chrome 插件开发实录

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...

  2. MVC + Vue.js 初体验(实现表单操作)

    Vuejs http://cn.vuejs.org/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...

  3. Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js

    生产材料PHP:PHP 5.6+Laravel 5.4:https://github.com/laravel/laravel/releases/Composer:http://getcomposer. ...

  4. node.js 初体验

    node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...

  5. 范仁义web前端介绍课程---4、html、css、js初体验

    范仁义web前端介绍课程---4.html.css.js初体验 一.总结 一句话总结: html:就是网站的骨架,比如div标签.a标签等 css:style标签或者style属性里面的就是css j ...

  6. Knockout.js初体验

    前不久在网上看到一个轻量级MVVM js类库叫Knockout.js,觉得很好奇,搜了一下Knockout.js相关资料,也初体验了一下,顿时感觉这个类库的设计很有意思.接下来就搞清楚什么是Knock ...

  7. vue.jsc初体验

    Vue 1.安装脚手架 (1)npm install -g vue-cli (2)Vue -v //查看是否安装成功 (3)Vue init webpack name(名称) (4)Npm insta ...

  8. 一次基于Vue.Js用户体验的优化

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  9. impress.js初体验

    概述 如果你已经厌烦了使用PowerPoint制作PPT,那么impress.js是一个非常好的选择,用它做的PPT更加直观,效果也非常的不错.装X是需要一定代价的,不过如果你是个前端爱好者那么一切就 ...

随机推荐

  1. 对List中对象的去重

    今天项目中遇到了一个对List中对象去重的问题. 首先对于我们自己系统中的对象我们只要重写该对象的 equal 和 hashcode 即可(利用对象中的能够唯一确定对象的属性). 但是我遇到的不是本系 ...

  2. 漫谈 Greenplum 开源背后的动机

    漫谈 Greenplum 开源背后的动机  Greenplum是一家总部位于美国加利福尼亚州,为全球大型企业用户提供新型企业级数据仓库(EDW).企业级数据云(EDC)和商务智能(BI)提供解决方案和 ...

  3. Linux下的字符集问题

    怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导 ...

  4. Centos7 PHP7 编译安装 开机自启动

    1.PHP7.0.13下载 wget http://cn2.php.net/get/php-7.0.13.tar.gz/from/this/mirror 2.解压 .tar.gz 3. 进入目录 cd ...

  5. MyBatis——优化MyBatis配置文件中的配置

    原文:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写 ...

  6. oracle中between

    oracle中between and包含边界值,也就是所谓的闭区间. 如 between 1 and 100,则表示包含1和100及以内的一切数值. 如以下语句: 1 2 3 4 5 6 7 8 9 ...

  7. xcode使用

    1xcode模拟器插件路径 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 2调试 Po值: nil就是0,而不是空值 小细 ...

  8. 合并Excel文件

    //合并Excel文件 private void MargeExcelFile(string destFile, string dirPath) { DirectoryInfo dir = new D ...

  9. PHP开发者常犯的MySQL错误

    PHP开发者常犯的MySQL错误   数据库是WEB大多数应用开发的基础.如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分. PHP看起来很简单,一个初学者也可以几个小时内就 ...

  10. java 内部类3(匿名内部类)

    匿名内部类: 1.没有类名的类就叫匿名内部类 2.好处:简化书写. 3.使用前提:必须有继承或实现关系......不要想着你自己没有钱你没可是你爸有 4.一般用于于实参.(重点) class Oute ...