On Github wongjohn / angular1-vs-angular2
Angular 2和Angular 1之间有很多概念和语法上的改变,接下来我们从两个框架的以下方面进行对比:
<body ng-app="movieHunter">
import {bootstrap} from 'angular2/platform/browser'; import {AppComponent} from './app.component'; bootstrap(AppComponent);
Angular 1中,我们通过ng-app指令启动应用,同时指定启动的模块(如movieHunter);
而在Angular 2中没有启动指令,我们通过显示调用bootstrap函数来启动应用,将模块以参数的形式传递。
Hello {{'Angular 1'}}
Hello {{'Angular 2'}}Properties
<a ng-href="angularDocsUrl"> Angular Docs</a>
<a [href]="angularDocsUrl"> Angular Docs</a>Events
<button ng-click="buy($event)">
<button (click)="buy($event)">Two-way
<input ng-model="userName">
<input [(ng-model)]="userName">
Angular 2保留Angular 1中的单向绑定(花括号语法),又细分了属性绑定、事件绑定,修改了双向绑定的使用方式。
angular .module("movieHunter") .controller("MovieListCtrl", ["movieService", function MovieListCtrl(movieService) { }]);
@Component({ selector: 'movie-list', templateUrl: 'app/movie-list.component.html', styleUrls: ['app/movie-list.component.css'], pipes: [StringSafeDatePipe] })
Angular 1
Angular 2
Angular 2没有了Angular 1中Scope、Controller的概念,Component中定义的属性、方法都以数据绑定的形式绑定到Component模版中。
Angular 2的应用,都是从一个根组件(Root Component)开始,最终,我们的应用能被抽象成一个个组件组成的树。
<input ng-model="vm.favoriteHero"/>
<input [(ngModel)]="favoriteHero" />
<tr ng-repeat="movie in vm.movies"> <td>{{movie.title}}</td> </tr>
<tr *ngFor="#movie of movies"> <td>{{movie.title}}</td> </tr>
<table ng-if="movies.length">
<table *ngIf="movies.length">
<img ng-src="{{movie.imageurl}}">
<img [src]="movie.imageurl">
Angular 2将指令细分为“结构指令”(Structural directives),和“属性指令”(Attribute directives)。
<td>{{movie.title | uppercase}}</td>
<td>{{movie.title | uppercase}}</td>
在Angular 1中,我们可以使用“|”符号来过滤或转换数据的展现,比如在这个例子中,我们把title属性全部改成了大写。
在Angular 2中,仍然使用同样的语法,只不过在这里改了称呼,重新命名为“Pipe”。
MovieListCtrl.$inject = ['MovieService']; function MovieListCtrl(movieService) { }
constructor(movieService: MovieService) { }
Angular 1中,我们可以在Controller等方法中通过名字注入依赖; 而在Angular 2中,我们需要在构造函数中,以参数的形式注入。
angular.module("movieHunter", ["ngRoute"]);
import {Component} from 'angular2/core'; import {ROUTER_DIRECTIVES} from "angular2/router";
在Angular 1中,我们通过定义模块,用来管理我们的Controllers、Services、Directives等; 而Angular 2没有自己的模块,而是使用ES 2015的模块系统,而ES 2015的模块系统是基于文件的,每一个文件就是一个模块。
根据官方说法,Angular 2比Angular 1有了极大的性能提升,而且学习资源也越来越丰富,下面贴两个教育资源地址。