angular1.x和angular2+並行,angular1.x 升級 angular2+方案
本篇文章介紹的是關於angularjs1.x升級angularjs2 方案,還有介紹了angularjs1.x和angularjs2 的並行,現在我們就一起來看這篇文章吧
angular1.x 升級angular2 方案
我給大家提供的是angular1.x和angular5並行,增量式升級方案,這樣大家可以循序漸進升級自己的應用,不想看文字直接demo入手migration-from-angular1.x-to-angular2Plus
方案1:主體為angular1.x,逐步將angular1.x當中service、 component、filter、controller、route、dependencies升級為angular5
方案2: 主體為angular5,將專案所有js檔案先進行一次加工,採用ES6的方式將每個js文件module
export出來,再逐步將內容向angular5靠近
#我建議選擇方案1增量式升級,透過在同一個應用中一起運行這兩個框架,並且逐一把AngularJS的組件遷移到Angular。可以在不必打斷其它業務的前提下,升級應用程序,因為這項工作可以多人協作完成,在一段時間內逐漸鋪平,下面就方案1展開說明
Hybrid APP主要依賴Angular提供upgrade/static模組。後面你將隨處可見它的身影。以下手把手教你將angular1.x遷移到angular2
1、呼叫UpgradeModule 來引導AngularJS
在AngularJS中,我們會把AngularJS的資源加入到angular.module屬性上。在Angular中,我們會創建一個或多個帶有NgModule裝飾器的類,這些裝飾器用來在元資料中描述Angular資源。在混合式應用中,我們同時運行了兩個版本的Angular。這意味著我們至少需要AngularJS和Angular各提供一個模組。要引導混合式應用,我們在應用中必須同時引導 Angular 和 AngularJS。要先引導 Angular ,然後再呼叫 UpgradeModule 來引導 AngularJS。
從HTML中移除ng-app和ng-strict-di指令, 建立一個app.module.ts文件,並加入下列NgModule類別:
import { UpgradeModule } from '@angular/upgrade/static'; @NgModule({ imports: [ UpgradeModule ] }) export class AppModule { constructor(private upgrade: UpgradeModule) { } ngDoBootstrap() { this.upgrade.bootstrap(document.body, ['yourAngularJsAppName'], { strictDi: true }); } }
用AppModule.ngDoBootstrap方法中啟動AngularJS 應用程式,現在我們就可以使用platformBrowserDynamic.bootstrapModule 方法來啟動AppModule 了。
main.ts:
import {AppModule} from './app/app.module'; import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.log(err));
我們就要開始執行AngularJS 5的混合式應用程式了!所有現存的AngularJS程式碼會像以前一樣正常運作,但是我們現在也同樣可以執行Angular程式碼了
2、將專案中的services逐步升級為angular5
#我們將username-service.js裡面的內容升級為username-service.ts:
import { Injectable } from '@angular/core'; @Injectable() export class UsernameService { get() { return 'nina' } }
要在angular1.x中使用UsernameService,先建立一個downgrade-services.ts文件,這裡將會存放所有angular5服務降級後在angular1.x中使用的服務
downgrade-services.ts:
import * as angular from 'angular'; import { downgradeInjectable } from '@angular/upgrade/static'; import { UsernameService } from './services/ username-service '; angular.module('yourAngularJsAppName') .factory('UsernameService', downgradeInjectable(UsernameService));
完成這兩個步驟之後UsernameService就可以在angular1.x controller component service等注入使用了,在angular5的使用方法這裡就不舉例了,按照angular5的使用方法來就行
3、專案中的filter逐步升級為angular5的pipe,同時angular1.x的filter依然保留
由於filter的效能問題angular2中已經將filter改為pipe,angular團隊沒有提供filter升級為pipe,或pipe降級為filter的module,所以angular1.x中使用filter,angular中使用pipe,filter的升級放在component之前,因為component的template可能會用到
username-pipe.ts:
import { Pipe, PipeTransform } from '@angular/core'; Pipe({ name: 'username' }) export class usernamePipe implements PipeTransform { transform(value: string): string { return value === 'nina' ? '张三' : value; } }
4、將專案中的component逐步升級為angular5的component
我們將hero-detail.js裡面的內容升級為hero-detail.ts:
import { Component, EventEmitter, Input, Output, ViewContainerRef } from '@angular/core'; import { UsernameService } from '../../service/username-service'; @Component({ selector: 'hero-detail', templateUrl: './hero-detail.component.html' }) export class HeroDetailComponent { Public hero: string; constructor(private usernameService: UsernameService) { this.hero = usernameService.get() } }
要在angular1.x中使用hero-detail component,先建立一個downgrade-components.ts文件,這裡將會存放所有angular5元件降級後在angular1.x中使用的元件
downgrade-components.ts:
import * as angular from 'angular'; import { downgradeComponent } from '@angular/upgrade/static'; import { HeroDetailComponent } from './app/components/hero-detail/hero-detail.component'; angular.module('yourAngularJsAppName') .directive('heroDetail', downgradeComponent({ component: HeroDetailComponent }) as angular.IDirectiveFactory)
現在你可以在angular1.x中的template使用hero-detail元件了,元件之間通訊的問題依照angular5的介面寫
5、將angular1.x controller改成angular5 component
現在就剩下controller了,angular2已經取消了controller,controller可以把它當成一個大的component,所以我們按照component的方法重構controller,並且對新的component降級,controller重構之後我們需要修改路由,我們現在使用的還是angular1.x的路由,基本上一個路由對應的是一個controller,這個時候路由可以這樣修改:
假設有個TestContentCtrl,對應的路由是test(想看更多就到PHP中文網AngularJS開發手冊中學習)
.state('test', { url: '/test', controller: 'TestContentCtrl', controllerAs: 'vm', templateUrl: './src/controllers/test-content-ctrl.html' })
在TestContentCtrl改成test-content component後
.state('test', { url: '/test', template: '<test-content></test-content>' })
6、第三方外掛程式或庫解決方案
關於專案中引用基於angular1.x的插件或函式庫,基本都能找到angular2 的版本,可以將angular2 的版本引入進行降級處理就可以在angular1.x中使用了,但是~~~, angular2 的版本很多API都改了,angular1.x中的對應使用方法可能不存在了,這裡有兩種解
引入angular2 的版本,刪除angular1.x版本,降級後來在angular1.x應用程式中用到該插件的都檢查一次,運用angular2 的版本的API使用該插件
-
引入angular2 的版本,保留angular1.x版本,angular1. x應用使用angular1.x版本插件,
angular5應用使用angular2 版本插件,方案2增加了項目的體積,相同的插件引用了兩個版本。在不影響首屏載入時間的情況下方案2是不錯的選擇,因為一次將所有插件或庫的API全部過一遍,工作量比較大容易出錯,也不符合我們增量式升級的初衷
現在專案中所有的內容基本上都升級為angular5了,我們可以刪除downgrade-services.ts和downgrade-components.ts這兩個檔案了,同時將路由升級為angular5,刪除angular1.x相關的函式庫和插件,一個完整的angular5應用程式就誕生了
好了,這篇文章到這就結束了(想看更多就到PHP中文網AngularJS使用手冊中學習),有問題的可以在下方留言提問。
以上是angular1.x和angular2+並行,angular1.x 升級 angular2+方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
