vue.js——初体验
看到最近很火的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——初体验的更多相关文章
- vue.js 初体验— Chrome 插件开发实录
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:陈纬杰 背景 对于经常和动画开发打交道的开发者对于Animate.css这个动画库不会陌生,它把一些常见 ...
- MVC + Vue.js 初体验(实现表单操作)
Vuejs http://cn.vuejs.org/ Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...
- Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js
生产材料PHP:PHP 5.6+Laravel 5.4:https://github.com/laravel/laravel/releases/Composer:http://getcomposer. ...
- node.js 初体验
node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...
- 范仁义web前端介绍课程---4、html、css、js初体验
范仁义web前端介绍课程---4.html.css.js初体验 一.总结 一句话总结: html:就是网站的骨架,比如div标签.a标签等 css:style标签或者style属性里面的就是css j ...
- Knockout.js初体验
前不久在网上看到一个轻量级MVVM js类库叫Knockout.js,觉得很好奇,搜了一下Knockout.js相关资料,也初体验了一下,顿时感觉这个类库的设计很有意思.接下来就搞清楚什么是Knock ...
- vue.jsc初体验
Vue 1.安装脚手架 (1)npm install -g vue-cli (2)Vue -v //查看是否安装成功 (3)Vue init webpack name(名称) (4)Npm insta ...
- 一次基于Vue.Js用户体验的优化
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- impress.js初体验
概述 如果你已经厌烦了使用PowerPoint制作PPT,那么impress.js是一个非常好的选择,用它做的PPT更加直观,效果也非常的不错.装X是需要一定代价的,不过如果你是个前端爱好者那么一切就 ...
随机推荐
- CUBRID学习笔记 40 使用net修改数据
修改 connection.Open(); string queryString = "UPDATE nation set capital = 'X' where `code` = ...
- ZOJ 3819 Average Score(平均分)
Description 题目描述 Bob is a freshman in Marjar University. He is clever and diligent. However, he is n ...
- git sshkeygen Fingerprint cannot be generated解决方法
ssh-keygen -t rsa -C "xxx@xxx.com" 生成后使用cat或者vim 查看该rsa,然后复制到github的ssh keys中: 提示: ...
- 自定义表单input
我想实现下面这个效果?应该怎么写最方便呢?最有效,兼容性最好呢 我使用<p>标签套lable,加input的组合,p标签绝对定位,input标签铺满,用padding填充. 主要css . ...
- elcipse 中利用maven创建web工程
如何创建: http://huxiaoheihei.iteye.com/blog/1766986 遇到的问题: 1: 如果spring MVC配置了 <servlet> <servl ...
- SQL VIEW 使用语法
之前一直都不知道VIEW有什么作用,写程序的时候也很少遇到过,复习SQL语句的时候碰到了,就记录下来吧. 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列, ...
- 简单RTOS学习(一) uc/os-II 工程模板建立
随着工业需求以及单片机性能越来越高,单个芯片能够且需要处理的任务也越来越多,使用传统前后台任务模式已经很难满足设计的需求,嵌入式实时操作系统正是在这种背景下发展起来,目前流行的有rt-thread,f ...
- hdu 5317 RGCDQ(前缀和)
题目链接:hdu 5317 这题看数据量就知道需要先预处理,然后对每个询问都需要在 O(logn) 以下的复杂度求出,由数学规律可以推出 1 <= F(x) <= 7,所以对每组(L, R ...
- POJ 2385 Apple Catching
比起之前一直在刷的背包题,这道题可以算是最纯粹的dp了,写下简单题解. 题意是说cows在1树和2树下来回移动取苹果,有移动次数限制,问最后能拿到的最多苹果数,含有最优子结构性质,大致的状态转移也不难 ...
- vsftp搭配iptables的配置
[similarface@InnerTest vsftpd]$ ll total 48 -rw------- 1 root root 125 Mar 23 02:26 ftpusers -rw-r-- ...