亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

ng1和ng2的部分對比

2024-04-27 15:07:33
字體:
來源:轉載
供稿:網友

前言:

  angular2相比angular1做了革命性的改變。對于開發者來說,我們知道它框架的實現上改變極大。我們看到代碼也能發現它寫法上變化很大,似乎完全是另一個東西。

但是當我們真正去寫下去的時候,又會發現,處處都有angular1的影子,處處都是angular1的概念。對,沒錯。angular始終是angular,換件“衣服”,還是angular。

最開始我第一眼看到angular2的代碼的時候,是有點排斥的,怎么感覺就像是react的寫法...而后,我自己親手,寫它的demo時候發現,這貨還是原本的angular,一切都那么熟悉。

所以有angular1基礎的同僚,完全不用排斥。下面來對比一部分兩個版本的寫法。

 

directive

 

angular1

angular2

ng-app

Bootstrapping

<body ng-app="myapp">

ng1中初始化引導應用,通過ngApp屬性定義應用,并通過定義ng-view屬性渲染到相應dom

import { bootstrap } from '@angular/platform-browser-dynamic';import { AppComponent } from './app.component';bootstrap(AppComponent);

ng2引導應用通過bootstrap類實例化,AppComponent的@Component的selector屬性選擇dom進行渲染

 

ng-class

ngClass

 
<div ng-class="{active: isActive}"><div ng-class="{active: isActive,shazam: isImportant}"><div ng-class="{true: 'active',false: 'isImportant'}[isActive]

 

 
<div [ngClass]="{active: isActive}"><div [ngClass]="{active: isActive,shazam: isImportant}"><div [class.active]="isActive">

 [class.active]指代的就是active類,最開始我一看到還以為是偽類的寫法

ng-click

click event

 
<button ng-click="vm.toggleImage()"><button ng-click="vm.toggleImage($event)">

 

 
<button (click)="toggleImage()"><button (click)="toggleImage($event)">

 

ng-controller

Component decorator

 
<div ng-controller="MovieListCtrl as vm">

 

 復制代碼
@Component({  selector: 'movie-list',  templateUrl:'app/movie-list.component.html',  styleUrls: ['app/movie-list.component.CSS'],  pipes: [StringSafeDatePipe]})復制代碼

 

ng-show or ng-hide

[hidden] 

 
<h3 ng-show="vm.favoriteHero">  Your favorite hero is: {{vm.favoriteHero}}</h3>

 

 
<h3 [hidden]="!favoriteHero">  Your favorite hero is: {{favoriteHero}}</h3>

只是用[hidden]屬性,沒有[show]屬性

ng-href

[href]

 
<a ng-href="angularDocsUrl">Angular Docs</a>

 

 復制代碼
@RouteConfig([    {        path: '/movies',        name: 'Movies',        component: HeroesComponent    }])復制代碼
<a [href]="movies">Angular Docs</a>
<a [routerLink]="['Movies']">Movies</a>

[href] 對應的是路由配置里path鏈接, [routerLink] 對應的是路由name 。

ng-if

*ngIf

 
<table ng-if="movies.length">

 

 
<table *ngIf="movies.length">

 

ng-model

ngModel

 
<input ng-model="vm.favoriteHero"/>

ng-model在angular1中是雙向綁定指令

 
<input [(ngModel)]="favoriteHero" />
<input bindon-ngModel="favoriteHero">

[()]在angular2中代表雙向綁定, 也可以使用bindon-ngModel,推薦前者寫法

ng-repeat

*ngFor

<tr ng-repeat="movie in vm.movies">

 

<tr *ngFor="let movie of vm.movies">

如果不加*,只會遍歷一個項

ng-src

[src]

 
<img ng-src="{{movie.imageurl}}">

 

 
<img [src]="movie.imageurl">

 

ng-style

ngStyle

 
<div ng-style="{color: colorPReference}">

 

 
<div [ngStyle]="{color: colorPreference}"><div [style.color]="colorPreference">

 

ng-switch

ngSwitch

 復制代碼
<div ng-switch="vm.favoriteHero">    <div ng-switch-when="true">      Excellent choice!    </div>    <div ng-switch-when="false">      No movie, sorry!    </div>    <div ng-switch-default>      Please enter your favorite hero.    </div></div>復制代碼

 

 復制代碼
<span [ngSwitch]="favoriteHero">  <p *ngSwitchWhen="true">    Excellent choice!  </p>  <p *ngSwitchWhen="false">    No movie, sorry!  </p>  <p *ngSwitchDefault>    Please enter your favorite hero.  </p></span>復制代碼

 

 

Filters / Pipes:

 

 

angular1

angular2

currency

currency

<td>{{movie.price | currency}}</td>

 

<td>{{133567 | currency:'USD':true}}</td> //$133,567

<td>{{133567 | currency:'RMB':true}}</td> //RMB133,567

屬性值不支持¥,$等符號,必須按照USD,RMB這樣寫,否則不顯示

 

date

date

 
<td>{{movie.releaseDate  | date}}</td>

 

 
<td>{{movie.releaseDate | date}}</td>

 

filter

none

 
<tr ng-repeat="movie in movieList | filter: {title:listFilter}">

 

 

由于性能原因,ng2沒有filter指令,需要在component用戶自己定義過濾

json

json

 
<pre>{{movie | json}}</pre>

 

 
<pre>{{movie | json}}</pre>

和 JSON.stringify 功能相同 ,和 angular1 的 json 一樣

limitTo

slice

 
<tr ng-repeat="movie in movieList | limitTo:2:0">

 

 
<tr *ngFor="let movie of movies | slice:0:2">

 

lowercase

lowercase

 
<div>{{movie.title | lowercase}}</div>

 

 
<td>{{movie.title | lowercase}}</td>

 

number

number

 
<td>{{movie.starRating  | number}}</td>

 

 
<td>{{movie.starRating | number}}</td><td>{{movie.starRating | number:'1.1-2'}}</td><td>{{movie.approvalRating | percent: '1.0-2'}}</td><td>{{movie.approvalRating | percent:'4.3-5'}}</td>

number 和 percent 屬性值控制小數點后面的位數,只是寫法讓人看不懂,有誰知道為什么是這樣?

orderBy

none

 
<tr ng-repeat="movie in movieList | orderBy : 'title'">

 

 

也是由于性能問題,ng2不再提供此指令

 

Controllers / Components:

   angular1 視圖的模型和方法都在控制器(Controllers)里,angular2中建立這些在組件(Components)里。

 

angular1

angular2

currency

currency

<td>{{movie.price | currency}}</td>

 

<td>{{133567 | currency:'USD':true}}</td> //$133,567

<td>{{133567 | currency:'RMB':true}}</td> //RMB133,567

屬性值不支持¥,$等符號,必須按照USD,RMB這樣寫,否則不顯示

 

IIFE(函數表達式)

none

  

在angular1中,我們經常定義一個立即調用函數表達式(或IIFE)在我們的控制器代碼。

這讓我們的控制器代碼全局命名空間。

  

angular2中我們不需要擔心這個問題, 因為我們使用ES 2015模塊和模塊處理我們的命名空間

Angular modules

import

 
angular.module("movieHunter", ["ngRoute"]);

 

 
import { Component } from '@angular/core';import { ROUTER_DIRECTIVES } from '@angular/router-deprecated';

angular2 使用es2015 modules ,每個代碼文件都是模塊,可以直接導入文件模塊使用

Controller registration

Component Decorator

 
angular  .module("movieHunter")  .controller("MovieListCtrl",              ["movieService",               MovieListCtrl]);

在angular1中,注冊模塊下的控制器,通過以上方法。

第一個參數是控制器命名,第二個參數用字符串定義所有依賴,和一個控制器引用函數

 復制代碼
@Component({  selector: 'movie-list',  templateUrl:'app/movie-list.component.html',  styleUrls: ['app/movie-list.component.css'],  pipes: [StringSafeDatePipe]})復制代碼

 angular2中,我們通過@Component提供元數據,如模板和樣式

Controller function

Component class

 
function MovieListCtrl(movieService) {}

在angular1中,我們編寫模型和方法在控制器函數里。

 
export class MovieListComponent {}

在angular2中,我們創建一個組件類編寫模型和方法

Dependency Injection

Dependency Injection

 
MovieListCtrl.$inject = ['MovieService'];function MovieListCtrl(movieService) {}

ng1中,必須要對每個依賴進行注入

 
constructor(movieService: MovieService) {}

在ng2中,constructor注入依賴,但是需要模塊被當前組件或者當前組件的父組件引入依賴。

比如,當前組件引入依賴服務, import { MovieService } from './MovieService';

 

Style Sheets:

 

angular1

angular2

link tag

link tag

<link href="styles.css" rel="stylesheet" />

<link href="styles.css" rel="stylesheet" />

屬性值不支持¥,$等符號,必須按照USD,RMB這樣寫,否則不顯示

 

StyleUrls

angular2 中 我們可以在@Component 中引入css,

此css默認會在當前組件形成一個獨立的css作用域。

詳情可以看此系列第三篇博客?!坝⑿壑谩币娐労托〗Y----angular2系列(三)

styleUrls: ['app/movie-list.component.css'],

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产高清自在线| 国产一区二区激情| 在线观看日韩专区| 欧美最猛性xxxx| 日本sm极度另类视频| 91麻豆国产精品| 狠狠躁夜夜躁人人爽超碰91| 成人国产精品久久久久久亚洲| 在线免费观看羞羞视频一区二区| 精品久久久精品| 自拍偷拍亚洲欧美| 裸体女人亚洲精品一区| 亚洲最大成人网色| 精品国产一区二区三区久久狼5月| 午夜精品久久久久久99热| 91久久精品久久国产性色也91| www.亚洲免费视频| 欧美性xxxx极品hd欧美风情| 不卡伊人av在线播放| 不卡av电影在线观看| 欧美日韩国产精品一区二区三区四区| 久久精品一区中文字幕| 精品久久久久久中文字幕一区奶水| 在线日韩第一页| 国产精品美女www爽爽爽视频| 黑人巨大精品欧美一区二区三区| 成人字幕网zmw| 国产精品久久电影观看| 久久亚洲精品一区二区| 久久精品国产久精国产思思| 久久久久女教师免费一区| 精品国产精品三级精品av网址| 欧美一级在线播放| 国产区精品在线观看| 亚洲综合精品一区二区| 日韩va亚洲va欧洲va国产| 日韩电影中文字幕在线观看| 日本一区二区在线播放| 国产精品直播网红| 欧美日韩国产999| 孩xxxx性bbbb欧美| 国产精品极品美女粉嫩高清在线| 日韩中文综合网| 91高清视频免费观看| 久久亚洲影音av资源网| 欧美日韩国产精品一区二区不卡中文| 欧美乱妇高清无乱码| 欧美激情免费看| 自拍偷拍亚洲精品| 91视频国产高清| 欧美一级片一区| 社区色欧美激情 | 色樱桃影院亚洲精品影院| 亚洲激情视频在线| 午夜精品免费视频| 热re99久久精品国产66热| 红桃视频成人在线观看| 欧美亚洲成人精品| 国产精品久久久久影院日本| 国产精品入口免费视频一| 亚洲美女av黄| 日韩国产一区三区| 欧美激情中文字幕乱码免费| 亚洲第一中文字幕| 国产精品国语对白| 国产精品扒开腿爽爽爽视频| 欧美激情精品在线| 成人性生交大片免费观看嘿嘿视频| 久久久在线观看| 久久久久久97| 国产精品xxxxx| 日韩精品视频免费专区在线播放| 国产精品一区二区三区久久久| 国产一区二区三区免费视频| 国产精品福利在线观看网址| 4438全国亚洲精品在线观看视频| 国产精品久久久久av免费| 日产精品99久久久久久| 中文在线资源观看视频网站免费不卡| 国产一区二区黑人欧美xxxx| 日韩精品欧美国产精品忘忧草| 亚洲国产中文字幕在线观看| 成人福利网站在线观看11| 国产精品视频久久久| 亚洲欧美福利视频| 亚洲欧美一区二区三区在线| 国产一区二区三区高清在线观看| 2025国产精品视频| 亚洲成色www8888| 亚洲精品午夜精品| 九九精品视频在线观看| 97人人爽人人喊人人模波多| 北条麻妃在线一区二区| 91精品国产自产91精品| 欧美在线精品免播放器视频| 欧美大片欧美激情性色a∨久久| 中文字幕久久久| 91精品久久久久久久久久久| 国产91网红主播在线观看| 日韩一中文字幕| 国产日韩综合一区二区性色av| 69国产精品成人在线播放| 国产成+人+综合+亚洲欧洲| 国产精品视频白浆免费视频| 一级做a爰片久久毛片美女图片| 久久综合网hezyo| 国产精品白嫩美女在线观看| 欧美性猛交xxxx久久久| 成人写真视频福利网| 一本色道久久88精品综合| 国产精品成人国产乱一区| 一本一本久久a久久精品综合小说| 国产精品久久久久久久久男| 国产亚洲人成网站在线观看| 国产91对白在线播放| 亚洲精品一二区| 欧美精品激情在线观看| 国产精品久久不能| 最近2019年中文视频免费在线观看| 国产欧美日韩丝袜精品一区| 亲子乱一区二区三区电影| 欧美三级欧美成人高清www| 欧美日韩国产丝袜另类| 亚洲韩国青草视频| 久久久久久久久久国产| 91精品国产九九九久久久亚洲| 亚洲欧洲成视频免费观看| 欧美在线精品免播放器视频| 秋霞成人午夜鲁丝一区二区三区| 91av视频在线播放| 国产精品99蜜臀久久不卡二区| 欧美精品激情在线观看| 国产欧美日韩精品丝袜高跟鞋| 亚洲国产精品久久精品怡红院| 91久久国产婷婷一区二区| 亚洲国产成人精品久久久国产成人一区| 91九色国产视频| 国产精品亚洲自拍| 成人福利网站在线观看11| 欧美精品第一页在线播放| 国产精品视频免费在线观看| 国产69精品99久久久久久宅男| 亚洲一区中文字幕在线观看| 日韩中文字幕精品| 亚洲国产精品系列| 国产综合视频在线观看| 中文字幕日韩av综合精品| 亚洲成人激情视频| 不卡伊人av在线播放| 中文字幕不卡在线视频极品| 亚洲日本中文字幕免费在线不卡| 日韩视频第一页| 性视频1819p久久| 国产精品男女猛烈高潮激情| 中文字幕日韩欧美精品在线观看| 亚洲bt天天射| 日韩经典中文字幕在线观看| 国产丝袜精品视频| 久久综合久久88| 日韩欧美亚洲成人| 亚洲精品v天堂中文字幕| 欧美激情在线观看视频| 欧美日韩一区二区精品| 精品久久久久久久久久|