因为各种笔试面试,最近都没时间做一些值得分享的东西,正好复习一下vue技术栈,与angular做一下对比。

angular1就跟vue比略low了。

1.数据绑定

  ng1 ng-bind,{{ scope }}   双向是ng-model

  ng2  {{scope}}  [scope] 双向是[(scope)]   (ng2的绑定拆分开来,而且支持函数返回是很棒的设计)

vue v-bind , {{ scope }} ,:scope 双向是v-model

2.组件化

ng1的组件化就是每个指令堆积起来的,本身并没有特别组件化的思想,只是大家把指令分为组件化指令和装饰性指令。那ng1的组件化就是angular注册好多指令

ng2的组件化是ts的class,比如:

@Component({
selector: 'my-app',
template: `
<h1>{{title}}</h1>
`,
styles: [`
.selected {
background-color: #CFD8DC !important;
color: white;
}
`]
})
export class AppComponent {
title = 'Tour of Heroes';
}

ng2的组件用ts的类实现,每个组件一个文件,然后通过import引入。用上高级语言就是比ng1高大上。

vue的组件可以分到文件也可以注册vue全局组件,纯vue的话需要:

var MyComponent = Vue.extend({
template: '<div>A custom component!</div>'
}) // 注册
Vue.component('my-component', MyComponent) // 创建根实例
new Vue({
el: '#example'
})

当然,加es6的话vue组件就变成了一个个.vue文件:

<style scoped>
.container {
border: 1px solid #00f;
}
</style> <template>
<div class="container">
<h2 class="red">{{msg}}</h2>
<Bpp :ok='msg' ></Bpp>
</div>
</template> <script>
import Bpp from './bpp.vue' export default {
data () {
return {
msg: "456"
}
},
components: {
Bpp
}
}
</script>

我更喜欢这种形式,一个组件的样式,js,dom都在一个文件里,或者在一个文件夹里。当然.vue需要过一下vue-loader。

3.组件通信

ng1父组件跟子组件通信,相当于props把属性写到子组件上,还可以公用一个$scope,service,还有万能的事件系统。

  反过来共用$scope也是行得通的,service,事件系统。。在传统的组件流中是不推荐子组件与父组件通信的。

ng2通信

<my-hero-detail [hero]="selectedHero"></my-hero-detail>
@Component({
selector: 'my-hero-detail',
template: `
<div *ngIf="hero">
<h2>{{hero.name}} details!</h2>
</div>
`
})
export class HeroDetailComponent {
@Input() hero: Hero;
}

类似props,但需要@Input声明。

vue通信是通过props字段,

  <Bpp :ok='msg' ></Bpp>

在Bpp组件里声明props属性来接受ok:

<script>
export default {
props:['ok'],
data(){
return {
data:1
}
}
}
</script>

可以看到ng2和vue的实现方式已经很类似了,只是ng2的ts通过注解来实现的,vue通过属性,api设计趋于大同。。

子组件到父组件的传输方式略有不同,大体解决思路就是观察者模式,不过也可以用redux这种全局的store思想。

ng2的观察者模式是rxjs,vue的就是自带的事件系统,各有优劣,ng2的rxjs功能强大,写起来简单舒服,但是需要引入rxjs,不过ng2本身就依赖rxjs。

4.路由

ng1路由ng-router,提供了 $routeProvider来控制路由,如果用到权限控制要:

 $routeProvider .when('/home', {
templateUrl: 'views/home.html',
controller: 'HomeCtrl',
auth:'home'
})

auth是自己加的属性,为实现权限的控制,ng-router还提供了钩子函数: $rootScope.$on('$routeChangeStart', function(scope, next, current) {})。这样就可以判断权限了。

类似的vue:

router.map({
'/a': {
component: { ... },
auth: true // 这里 auth 也是一个自定义字段
}
})

路由嵌套的话在该路由的对象上面加一个subRoutes。然而ng-router不支持嵌套,就需要第三方库ui-router。

vue这里也提供了钩子函数,为验证auth:

router.beforeEach(function (transition) {
if (transition.to.auth) {
// 对用户身份进行验证...
}
})

对于ng2,路由好像还没稳定下来,不知道api会不会改。。:

const appRoutes: Routes = [
{
path: 'heroes',
component: HeroesComponent
}
];

ng2的验证auth为:

{
path: 'guanggao',
component: MainContentComponent,
canActivate: [BlockIn]
}

有个canActivate属性,BlockIn是一个类,我们可以在BlockIn里写一些权限验证什么的。

三者的路由好像没怎么改,配置api都是类似的。

5.动画

ng1的动画模块,ng2强大的动画系统:

 animations: [
trigger('heroState', [
state('inactive', style({
backgroundColor: '#eee',
transform: 'scale(1)'
})),
state('active', style({
backgroundColor: '#cfd8dc',
transform: 'scale(1.1)'
})),
transition('inactive => active', animate('100ms ease-in')),
transition('active => inactive', animate('100ms ease-out'))
])
]

vue也提供了动画钩子:

Vue.transition('expand', {

  beforeEnter: function (el) {
el.textContent = 'beforeEnter'
},
enter: function (el) {
el.textContent = 'enter'
},
afterEnter: function (el) {
el.textContent = 'afterEnter'
},
enterCancelled: function (el) {
// handle cancellation
}, beforeLeave: function (el) {
el.textContent = 'beforeLeave'
},
leave: function (el) {
el.textContent = 'leave'
},
afterLeave: function (el) {
el.textContent = 'afterLeave'
},
leaveCancelled: function (el) {
// handle cancellation
}
})

ng1和vue都会给dom添加一些固定class...

angular与vue的应用对比的更多相关文章

  1. Angular和Vue.js 深度对比

    Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面.当和其它网络工具配合使用时,Vue.js 的优秀功能会得到大大加强.如今,已有许多开发人员开始使用 Vue ...

  2. Angular 和 Vue 使用的对比总结 -- 脚手架

    前言 之前是用Vue的,现在由于工作原因,开始使用Angular.分别是Vue2和Angular5入的坑.只是从使用上来对比总结,加深记忆,避免混淆. 什么 ?  你问实现原理的异同及优劣? 本宝宝还 ...

  3. NO.05--谈一谈Angular 和 Vue.js 的对比。

    几天的vue之后,给需要的盆友们带来一篇对比,也算是我近期之内业余时间的大工程,现在开始: Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面.当和其它网络工 ...

  4. angular和vue的对比学习之路

    vue-ng 打开vue的中文官网一段关于vue的描述 HTML 模板 + JSON 数据,再创建一个 Vue 实例,就这么简单. 那我么再看下angular中文网 AngularJS是为了克服HTM ...

  5. Vue和React对比

    Vue和React对比 Vue也已经升级到2.0版本了,到现在为止(2016/11/19)比较流行的MVVM框架有AngularJS(也有人认为其为MVC).ReactJS和VueJS,这三个框架中, ...

  6. Angular和Vue.js

    Angular和Vue.js Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面.当和其它网络工具配合使用时,Vue.js 的优秀功能会得到大大加强.如今,已 ...

  7. Angular Js 与bootstrap, angular 与 vue.js

    今天突然接到电话, 问我他们的区别  虽然平时看了,但是没记住,凉凉是肯定的 总结一下: bootstrap不算是javascript框架,它只是一个前端的ui框架,然后有一些附带的js插件而已.an ...

  8. angular和vue还有jquery的区别

    angularjs简单介绍和特点 首先angular是一个mvc框架, 使用mvc解耦, 采用model, controller以及view的方式去组织代码, 会将一个html页面分成若干个模块, 每 ...

  9. angular和vue双向数据绑定

    angular和vue双向数据绑定的原理(重点是vue的双向绑定) 我在整理javascript高级程序设计的笔记的时候看到面向对象设计那章,讲到对象属性分为数据属性和访问器属性,我们平时用的js对象 ...

随机推荐

  1. java8新特性:interface中的static方法和default方法

    java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...

  2. Bootstrap 面板(Panels)

    一.面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .panel-default 即可,如下面的 ...

  3. 校园电商项目4——SSM各项配置

    步骤一:数据库连接文件 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/school_o2o?useUni ...

  4. 读懂掌握 Python logging 模块源码 (附带一些 example)

    搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...

  5. Python turtle绘制阴阳太极图代码解析

    本文详细分析如何使用Python turtle绘制阴阳太极图,先来分解这个图形,图片中有四种颜色,每条曲线上的箭头表示乌龟移动的方向,首先从中心画一个半圆(红线),以红线所示圆的直径作半径画一个校园, ...

  6. python3高级编程

    1. SMTP发送邮件 internet相关协议: http:网页访问相关,httplib,urllib,xmlrpclib ftp:文件传输相关, ftplib, urllib nntp:新闻和帖子 ...

  7. RuntimeError: cryptography requires setuptools 18.5 or newer, please upgrade to a newer version of setuptool

    setuptool 太老了,更新下: pip install --upgrade setuptools

  8. Jira的搭建

    一.环境准备 jira7.2的运行是依赖java环境的,也就是说需要安装jdk并且要是1.8以上版本,如下: java -version 除此之外,我们还需要为jira创建对应的数据库.用户名和密码, ...

  9. BZOJ2616 SPOJ PERIODNI(笛卡尔树+树形dp)

    考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树.那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是 ...

  10. springcloud 学习

    参考: spring cloud 入门系列一:初识spring cloud http://blog.didispace.com/Spring-Cloud%E5%9F%BA%E7%A1%80%E6%95 ...