使用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('')
}
});
相关推荐
- **简单易用**:相比React.js和AngularJS,Vue.js 的 API 更加简单直观。 - **高性能**:Vue.js 使用基于依赖追踪的观察机制,并使用异步队列更新数据,这使得其在处理大量数据时具有较好的性能表现。 - **文档...
Vue.js是一个流行的JavaScript框架,用于构建用户界面和单页应用程序。v2.x版本的Vue.js官方教程详细介绍了Vue的核心概念和高级特性,适合开发人员深入学习和掌握Vue.js的应用开发。教程内容涵盖了Vue.js的基本使用...
对比其他前端框架,Vue.js 与React有诸多相似之处,如组件化开发、不内置路由和Ajax等功能,两者都需要编译后使用。然而,Vue.js 使用DOM模板,提供指令和过滤器,使得DOM操作更加简便。而React依赖Virtual DOM,其...
包括但不限于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允许开发者使用简化的语法进行事件绑定和属性绑定,这些语法在易读性和易写性上都比AngularJS更加直观。 Vue.js的源码非常小巧,其压缩后的生产版本只有25.11KB,这对于加载时间和性能优化有极大帮助。...
**MVVM(Model-View-ViewModel)模式**:Vue.js 主要采用了 MVVM 模式,与 AngularJS 的 MVC(Model-View-Controller)和 MVP(Model-View-Presenter)模式不同,MVVM 模式使得数据双向绑定更加便捷。MV* 模型还包括...
Vue.js的设计初衷是为了简化数据绑定的复杂性,解决控制器-模型-视图模式(如AngularJS)的繁琐,提高大型单页面应用(SPA)的开发效率和可读性。Vue.js支持组件化开发,组件可以是独立的、可重用的代码单元,使得...
- **技术讨论**:深入研究Angular.js的原理和技术实现,对比其他框架,如React和Vue.js。 4. **模板建站与系统软件工具** - **快速开发**:利用Angular.js的模板和指令,可以快速创建复杂的UI,节省开发时间。 -...
- **对比其他框架**:相较于React.js、Vue.js等框架,AngularJS具有更加完善的企业级开发支持,更适合构建大型复杂应用。 - **数据绑定方式**:AngularJS采用双向数据绑定,而React.js则主要采用单向数据流模式。 ...
【描述】:本篇文章将全面探讨Vue.js、AngularJS和Avalon.js这三种主流的MVVM框架,逐一分析它们的核心特性、优点与不足,旨在为开发者提供详尽的对比参考。 【标签】:"vue" "angular" "avalon" 【正文】: Vue....
Vue.js 是一款流行的前端JavaScript框架,由国人尤雨溪开发,因其轻量级、易学性和高效的特性而在开发社区中广受欢迎。以下是一些关于Vue.js的重要知识点: 1. **Vue的优点**: - **轻量级框架**:Vue的核心库专注...
Vue.js、React 和 AngularJS 是目前前端开发中最流行的三大框架,它们各有特色,适用于不同的开发需求。Vue 以其轻量级、易上手和高效性能受到开发者喜爱;React 则以其组件化思想和丰富的生态系统引领潮流;...
4. 数据绑定:双向数据绑定是现代前端框架如AngularJS和Vue.js的核心特性,它使得视图和模型之间的数据自动同步。模板引擎可以实现这一功能,例如,通过观察者模式监听数据变化,当数据改变时,自动更新对应的视图。...
在IT领域,前端开发是至关...这不仅加深了对jQuery的理解,也让我们有机会对比和学习AngularJS的MVC架构。在实际开发中,选择合适的工具和技术栈是非常重要的,理解并能灵活运用这些知识将有助于提升我们的开发技能。
- **AngularJS/React/Vue**: 这些是现代前端框架,它们提供了更全面的解决方案,但学习曲线较陡峭,且不直接处理DOM操作。 - **Vanilla JavaScript (原生JS)**: 原生JS没有jQuery那么便捷,但随着ES6的普及,原生JS...
10. **前端框架**:现代前端框架如jQuery、AngularJS、Vue.js或React.js提供了更高级的Ajax封装,简化了开发过程。根据项目规模和团队技术栈选择合适的框架。 通过以上知识点的学习和实践,开发者可以有效地将Ajax...
- 第三方框架:如Bootstrap、AngularJS、Vue.js等提供了内置的进度条组件,方便开发者快速集成。 3. **JQUERY插件**: - jQuery进度条插件,如`ProgressBar.js`,提供了丰富的自定义选项和动画效果,适用于各种...
在01.Angular4.x介绍以及和vue、react对比.pdf中,我们可以了解到Angular4与其他流行框架(如Vue.js和React.js)的异同。这包括它们的架构、学习曲线、性能、生态系统等方面的比较。理解这些对比有助于开发者根据...
模板可能包含了数据展示和管理的界面元素,如表格、图表等,这些可能依赖于前端数据绑定技术,如AngularJS或Vue.js。 7. 表单和交互:模板中的表单设计至关重要,因为物业管理系统需要用户输入信息或提交请求。表单...