`

使用Angularjs和Vue.js对比

 
阅读更多

使用Angularjs和Vue.js对比

之前项目都是使用Angularjs,(注明此处主要讲Angularjs 1)在初步使用Vue.js后做一个简单的对比笔记。
首先从理论上简单说一下各自的特点,之后再用几个小的例子加以说明。

Angular

  • 1,MVVM(Model)(View)(View-model)
  • 2,模块化(Module)控制器(Contoller)依赖注入:
  • 3,双向数据绑定:界面的操作能实时反映到数据,数据的变更能实时展现到界面。
  • 4,指令(ng-click ng-bind ng-model ng-href ng-src ng-if/ng-show...)
  • 5,服务Service($compile $filter $interval $timeout $http...)
  • 6,路由(ng-Route原生路由),ui-router(路由组件)
  • 7,Ajax封装($http)

其中双向数据绑定的实现使用了$scope变量的脏值检测,使用$scope.$watch(视图到模型),$scope.$apply(模型到视图)检测,内部调用的都是digest,当然也可以直接调用$scope.$digest进行脏检查。值得注意的是当数据变化十分频繁时,脏检测对浏览器性能的消耗将会很大,官方注明的最大检测脏值为2000个数据。

Vue

vue.js官网:是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定组合的视图组件

  • (1)模块化,目前最热的方式是在项目中直接使用ES6的模块化,结合Webpack进行项目打包
  • (2)组件化,创造单个component后缀为.vue的文件,包含template(html代码),script(es6代码),style(css样式)
  • (3)双向数据绑定:界面的操作能实时反映到数据,数据的变更能实时展现到界面。
  • (4)指令(v-html v-bind v-model v-if/v-show...)
  • (5)路由(vue-router)
  • (6)vuex 数据共享
  • (7)Ajax插件(vue-resource,axios)

vue非常小巧,压缩后min源码为72.9kb,gzip压缩后只有25.11kb,想比Angular为144kb,可以自驾搭配使用需要的库插件,类似路由插件(Vue-router),Ajax插件(vue-resource,axios)等

Vue与 Angular 双向数据绑定原理

angular.js :脏值检查

angular.js 是通过脏值检测的方式比对数据是否有变更,来决定是否更新视图,最简单的方式就是通过 setInterval() 定时轮询检测数据变动,当然Google不会这么low,angular只有在指定的事件触发时进入脏值检测,大致如下:

  • DOM事件,譬如用户输入文本,点击按钮等。( ng-click )
  • XHR响应事件 ( $http )
  • 浏览器Location变更事件 ( $location )
  • Timer事件( $timeout , $interval )
  • 执行 $digest() 或 $apply()

vue :数据劫持

vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/definePropertydefineProperty

下面直接上代码

首先当然是Hello World了

vue

<div id="app">
  {{ message }}
</div>

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!'
  }
})

Angular

<div ng-app="myApp" ng-controller="myCtrl">
 {{message}}
</div>

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.message = "Hello world";
});

相比较来看,vue采用了json的数据格式进行dom和data的编写,编写风格更加靠进js的数据编码格式,通俗易懂。

vue的双向数据绑定

<div id="app">
  <p>{{ message }}</p>
  <input v-model="message">
</div>

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!'
  }
})

Angular的双向数据绑定

<div ng-app="myApp" ng-controller="myCtrl">
  <p>{{message}}</p>
  <input ng-model="message">
</div>

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.message = "Hello world!";
});

vue虽然是一个轻量级的框架,提供的API确非常多,包括一些便捷的指令和属性操作,一般vue是指令使用(v-)操作符,相比angularjs指令使用(ng-)。其中vue.js还支持指令的简写方式:

  • (1)事件click

<a v-on: click="fn"></a>

简写方式:
`<a @click="fn"></a>`
  • (2)属性

    <a v-bind: href="url"></a>

    简写方式:
    <a :href="url"></a>

vue.渲染列表

<div id="app">
  <ul>
    <li v-for="name in names">
      {{ name.first }}
    </li>
  </ul>
</div>

new Vue({
  el: '#app',
  data: {
    names: [
      { first: 'summer', last: '7310' },
      { first: 'David', last:'666' },
      { first: 'Json', last:'888' }
    ]
  }
})

Angularjs渲染列表

<div ng-app="myApp" ng-controller="myCtrl">
  <li ng-repeat="name in names">{{name.first}}</li>
</div>

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.names = [
      { first: 'summer', last: '7310' },
      { first: 'David', last:'666' },
      { first: 'Json', last:'888' }
    ]
});

vue的循环

<ul>
    <li v-for="item in list">
        <a :href="item.url">{{item.title}}</a>
    </li>
</ul>

angular和vue的渲染差不多

<div class="item" ng-repeat="news in  newsList">
    <a ng-href="#/content/{{news.id}}">
        <img ng-src="{{news.img}}" />
        <div class="item-info">
            <h3 class="item-title">{{news.title}}</h3>
            <p class="item-time">{{news.createTime}}</p>
        </div>
    </a>
</div>

vue和Angular处理用户输入

<div id="app">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">Reverse Message</button>
</div>

new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

<div ng-app="myApp" ng-controller="myCtrl">
 <p>{{ message }}</p>
 <button ng-click="reverseMessage()">Reverse Message</button>
</div>

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.message = "Hello world!";
    $scope.reverseMessage = function() {
        this.message = this.message.split('').reverse().join('')
    }
});
分享到:
评论

相关推荐

    Vue.js学习文档

    - **简单易用**:相比React.js和AngularJS,Vue.js 的 API 更加简单直观。 - **高性能**:Vue.js 使用基于依赖追踪的观察机制,并使用异步队列更新数据,这使得其在处理大量数据时具有较好的性能表现。 - **文档...

    Vue.js v2.x 官方教程_103021.pdf

    Vue.js是一个流行的JavaScript框架,用于构建用户界面和单页应用程序。v2.x版本的Vue.js官方教程详细介绍了Vue的核心概念和高级特性,适合开发人员深入学习和掌握Vue.js的应用开发。教程内容涵盖了Vue.js的基本使用...

    vue.js前端应用技术分析

    对比其他前端框架,Vue.js 与React有诸多相似之处,如组件化开发、不内置路由和Ajax等功能,两者都需要编译后使用。然而,Vue.js 使用DOM模板,提供指令和过滤器,使得DOM操作更加简便。而React依赖Virtual DOM,其...

    vue.js服务端渲染指南中文pdf电子书

    包括但不限于Node.js、MongoDB、JavaScript、C、C#、PHP、Python、Angularjs、Ionic、React、UML、redis、MySQL、Nginx、CSS、HTML、Flask、Gulp、Mocha、Git、Meteor、Canvas、TypeScript、MaterialDesignLite、...

    浅谈Vue.js

    例如,Vue.js允许开发者使用简化的语法进行事件绑定和属性绑定,这些语法在易读性和易写性上都比AngularJS更加直观。 Vue.js的源码非常小巧,其压缩后的生产版本只有25.11KB,这对于加载时间和性能优化有极大帮助。...

    vue学习笔记

    **MVVM(Model-View-ViewModel)模式**:Vue.js 主要采用了 MVVM 模式,与 AngularJS 的 MVC(Model-View-Controller)和 MVP(Model-View-Presenter)模式不同,MVVM 模式使得数据双向绑定更加便捷。MV* 模型还包括...

    vue从入门到懵逼

    Vue.js的设计初衷是为了简化数据绑定的复杂性,解决控制器-模型-视图模式(如AngularJS)的繁琐,提高大型单页面应用(SPA)的开发效率和可读性。Vue.js支持组件化开发,组件可以是独立的、可重用的代码单元,使得...

    Angular.js v1.8.3.zip

    - **技术讨论**:深入研究Angular.js的原理和技术实现,对比其他框架,如React和Vue.js。 4. **模板建站与系统软件工具** - **快速开发**:利用Angular.js的模板和指令,可以快速创建复杂的UI,节省开发时间。 -...

    AngularJS 中文版

    - **对比其他框架**:相较于React.js、Vue.js等框架,AngularJS具有更加完善的企业级开发支持,更适合构建大型复杂应用。 - **数据绑定方式**:AngularJS采用双向数据绑定,而React.js则主要采用单向数据流模式。 ...

    vue,angular,avalon这三种MVVM框架优缺点

    【描述】:本篇文章将全面探讨Vue.js、AngularJS和Avalon.js这三种主流的MVVM框架,逐一分析它们的核心特性、优点与不足,旨在为开发者提供详尽的对比参考。 【标签】:"vue" "angular" "avalon" 【正文】: Vue....

    VUE资源VUE学习必用VUE常见面试题进阶面试题

    Vue.js 是一款流行的前端JavaScript框架,由国人尤雨溪开发,因其轻量级、易学性和高效的特性而在开发社区中广受欢迎。以下是一些关于Vue.js的重要知识点: 1. **Vue的优点**: - **轻量级框架**:Vue的核心库专注...

    2023最新vue面试题

    Vue.js、React 和 AngularJS 是目前前端开发中最流行的三大框架,它们各有特色,适用于不同的开发需求。Vue 以其轻量级、易上手和高效性能受到开发者喜爱;React 则以其组件化思想和丰富的生态系统引领潮流;...

    基于JavaScript和html的高性能模板引擎

    4. 数据绑定:双向数据绑定是现代前端框架如AngularJS和Vue.js的核心特性,它使得视图和模型之间的数据自动同步。模板引擎可以实现这一功能,例如,通过观察者模式监听数据变化,当数据改变时,自动更新对应的视图。...

    用JQUERY模仿Angularjs的todoList(mvc)

    在IT领域,前端开发是至关...这不仅加深了对jQuery的理解,也让我们有机会对比和学习AngularJS的MVC架构。在实际开发中,选择合适的工具和技术栈是非常重要的,理解并能灵活运用这些知识将有助于提升我们的开发技能。

    jquery-1.8.3.js及其它版本合集

    - **AngularJS/React/Vue**: 这些是现代前端框架,它们提供了更全面的解决方案,但学习曲线较陡峭,且不直接处理DOM操作。 - **Vanilla JavaScript (原生JS)**: 原生JS没有jQuery那么便捷,但随着ES6的普及,原生JS...

    使用Ajax和Web Service重构网上书店(Ajax Web Service)指导学习

    10. **前端框架**:现代前端框架如jQuery、AngularJS、Vue.js或React.js提供了更高级的Ajax封装,简化了开发过程。根据项目规模和团队技术栈选择合适的框架。 通过以上知识点的学习和实践,开发者可以有效地将Ajax...

    6个非常经典Web前端使用的炫丽进度条(一)

    - 第三方框架:如Bootstrap、AngularJS、Vue.js等提供了内置的进度条组件,方便开发者快速集成。 3. **JQUERY插件**: - jQuery进度条插件,如`ProgressBar.js`,提供了丰富的自定义选项和动画效果,适用于各种...

    angular4文档.zip

    在01.Angular4.x介绍以及和vue、react对比.pdf中,我们可以了解到Angular4与其他流行框架(如Vue.js和React.js)的异同。这包括它们的架构、学习曲线、性能、生态系统等方面的比较。理解这些对比有助于开发者根据...

    管理系统html模板

    模板可能包含了数据展示和管理的界面元素,如表格、图表等,这些可能依赖于前端数据绑定技术,如AngularJS或Vue.js。 7. 表单和交互:模板中的表单设计至关重要,因为物业管理系统需要用户输入信息或提交请求。表单...

Global site tag (gtag.js) - Google Analytics