国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

angular1.x和angular2+并行,angular1.x 升級(jí) angular2+方案

Olivia / 2186人閱讀

摘要:可以在不必打斷其它業(yè)務(wù)的前提下,升級(jí)應(yīng)用程序,因?yàn)檫@項(xiàng)工作可以多人協(xié)作完成,在一段時(shí)間內(nèi)逐漸鋪開(kāi),下面就方案展開(kāi)說(shuō)明主要依賴(lài)提供模塊。在混合式應(yīng)用中,我們同時(shí)運(yùn)行了兩個(gè)版本的。這意味著我們至少需要和各提供一個(gè)模塊。

angular1.x 升級(jí) angular2+ 方案

我給大家提供的是angular1.x和angular5并行,增量式升級(jí)方案,這樣大家可以循序漸進(jìn)升級(jí)自己的應(yīng)用,不想看文字直接demo入手migration-from-angular1.x-to-angular2Plus

方案1:主體為angular1.x,逐步將angular1.x當(dāng)中service、component、filter、controller、route、dependencies升級(jí)為angular5

方案2: 主體為angular5,將項(xiàng)目所有js文件先進(jìn)行一次加工,采用ES6的方式將每個(gè)js文件module
export出來(lái),再逐步將內(nèi)容向angular5靠近

我建議選擇方案1增量式升級(jí),通過(guò)在同一個(gè)應(yīng)用中一起運(yùn)行這兩個(gè)框架,并且逐個(gè)把AngularJS的組件遷移到Angular中。 可以在不必打斷其它業(yè)務(wù)的前提下,升級(jí)應(yīng)用程序,因?yàn)檫@項(xiàng)工作可以多人協(xié)作完成,在一段時(shí)間內(nèi)逐漸鋪開(kāi),下面就方案1展開(kāi)說(shuō)明

Hybrid APP主要依賴(lài)Angular提供upgrade/static模塊。后面你將隨處可見(jiàn)它的身影。以下手把手教你將angular1.x遷移到angular2+

1、調(diào)用 UpgradeModule 來(lái)引導(dǎo) AngularJS

在A(yíng)ngularJS中,我們會(huì)把AngularJS的資源添加到angular.module屬性上。 在A(yíng)ngular中,我們會(huì)創(chuàng)建一個(gè)或多個(gè)帶有NgModule裝飾器的類(lèi),這些裝飾器用來(lái)在元數(shù)據(jù)中描述Angular資源。在混合式應(yīng)用中,我們同時(shí)運(yùn)行了兩個(gè)版本的Angular。 這意味著我們至少需要AngularJS和Angular各提供一個(gè)模塊。要想引導(dǎo)混合式應(yīng)用,我們?cè)趹?yīng)用中必須同時(shí)引導(dǎo) Angular 和 AngularJS。要先引導(dǎo) Angular ,然后再調(diào)用 UpgradeModule 來(lái)引導(dǎo) AngularJS。

從HTML中移除ng-app和ng-strict-di指令, 創(chuàng)建一個(gè)app.module.ts文件,并添加下列NgModule類(lèi):

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方法中啟動(dòng) AngularJS 應(yīng)用,現(xiàn)在我們就可以使用 platformBrowserDynamic.bootstrapModule 方法來(lái)啟動(dòng) AppModule 了。

main.ts:

import {AppModule} from "./app/app.module";
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.log(err));

我們就要開(kāi)始運(yùn)行AngularJS+5的混合式應(yīng)用程序了!所有現(xiàn)存的AngularJS代碼會(huì)像以前一樣正常工作,但是我們現(xiàn)在也同樣可以運(yùn)行Angular代碼了

2、將項(xiàng)目中的services逐步升級(jí)為angular5

我們將username-service.js里面的內(nèi)容升級(jí)為username-service.ts:

import { Injectable } from "@angular/core";
@Injectable() 
export class UsernameService {
  get() {
    return "nina"
  }
}

要在angular1.x中使用UsernameService,先創(chuàng)建一個(gè)downgrade-services.ts文件,這里將會(huì)存放所有angular5服務(wù)降級(jí)后在angular1.x中使用的服務(wù)

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的使用方法來(lái)就行

3、項(xiàng)目中的filter逐步升級(jí)為angular5的pipe,同時(shí)angular1.x的filter依然保留

由于filter的性能問(wèn)題angular2中已經(jīng)將filter改為pipe,angular團(tuán)隊(duì)沒(méi)有提供filter升級(jí)為pipe,或者pipe降級(jí)為filter的module,所以angular1.x中使用filter,angular中使用pipe,filter的升級(jí)放在component之前,因?yàn)閏omponent的template可能會(huì)用到

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、將項(xiàng)目中的component逐步升級(jí)為angular5的component

我們將hero-detail.js里面的內(nèi)容升級(jí)為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,先創(chuàng)建一個(gè)downgrade-components.ts文件,這里將會(huì)存放所有angular5組件降級(jí)后在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)

現(xiàn)在你可以在angular1.x中的template中使用hero-detail組件了,組件之間通訊的問(wèn)題按照angular5的接口寫(xiě)

5、將angular1.x controller改成angular5 component

現(xiàn)在就剩下controller了,angular2已經(jīng)取消了controller,controller可以把它當(dāng)成一個(gè)大的component,所以我們按照component的方法重構(gòu)controller,并且對(duì)新的component降級(jí),controller重構(gòu)之后我們需要修改路由,我們現(xiàn)在使用的還是angular1.x的路由,基本上一個(gè)路由對(duì)應(yīng)的是一個(gè)controller,這個(gè)時(shí)候路由可以這樣修改:

假設(shè)有個(gè)TestContentCtrl,對(duì)應(yīng)的路由是test

.state("test", {
  url: "/test",
  controller: "TestContentCtrl",
  controllerAs: "vm",
  templateUrl: "./src/controllers/test-content-ctrl.html"
 })

在TestContentCtrl改成test-content component后

.state("test", {
  url: "/test",
  template: ""
 })

6、第三方插件或者庫(kù)解決方案

關(guān)于項(xiàng)目中引用基于angular1.x的插件或者庫(kù),基本都能找到angular2+的版本,可以將angular2+的版本引入進(jìn)行降級(jí)處理就可以在angular1.x中使用了,但是~~~, angular2+的版本很多API都改了,angular1.x中的對(duì)應(yīng)使用方法可能不存在了,這里有兩種解決方案

引入angular2+的版本,刪除angular1.x版本,降級(jí)后在angular1.x應(yīng)用中用到該插件的都檢查一次,運(yùn)用angular2+的版本的API使用該插件

引入angular2+的版本,保留angular1.x版本,angular1.x應(yīng)用使用angular1.x版本插件,
angular5應(yīng)用使用angular2+版本插件,

方案2增加了項(xiàng)目的體積,相同的插件引用了兩個(gè)版本。在不影響首屏加載時(shí)間的情況下方案2是不錯(cuò)的選擇,因?yàn)橐淮涡詫⑺胁寮蛘邘?kù)的API全部過(guò)一遍,工作量比較大容易出錯(cuò),也不符合我們?cè)隽渴缴?jí)的初衷

現(xiàn)在項(xiàng)目中所有的內(nèi)容基本都升級(jí)為angular5了,我們可以刪除downgrade-services.ts和downgrade-components.ts這兩個(gè)文件了,同時(shí)將路由升級(jí)為angular5,刪除angular1.x相關(guān)的庫(kù)和插件,一個(gè)完整的angular5應(yīng)用就誕生了

如果不是很明白直接看demo:migration-from-angular1.x-to-angular2Plus,喜歡點(diǎn)個(gè)贊喲~~~

分享個(gè)問(wèn)題:

如果import angular保錯(cuò)了,你可以考慮引入@types/angular

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107203.html

相關(guān)文章

  • Angular1.x + TypeScript 編碼風(fēng)格

    摘要:組件還包含數(shù)據(jù)事件的輸入與輸出,生命周期鉤子和使用單向數(shù)據(jù)流以及從父組件上獲取數(shù)據(jù)的事件對(duì)象備份。 說(shuō)明:參照了Angular1.x+es2015的中文翻譯,并將個(gè)人覺(jué)得不合適、不正確的地方進(jìn)行了修改,歡迎批評(píng)指正。 架構(gòu),文件結(jié)構(gòu),組件,單向數(shù)據(jù)流以及最佳實(shí)踐 來(lái)自@toddmotto團(tuán)隊(duì)的實(shí)用編碼指南 Angular 的編碼風(fēng)格以及架構(gòu)已經(jīng)使用ES2015進(jìn)行重寫(xiě),這些在A(yíng)ngul...

    ytwman 評(píng)論0 收藏0
  • Angular 2 快速上手

    摘要:為了簡(jiǎn)單起見(jiàn),在本文中將會(huì)使用。已經(jīng)實(shí)例化了并且將它的模板載入到了元素中。中的依賴(lài)注入發(fā)生在該類(lèi)的構(gòu)造函數(shù)中,因此我們將在構(gòu)造函數(shù)中注入。 國(guó)內(nèi) Angular2 資料比較少,這里看到一篇不錯(cuò)的入門(mén)文章就分享過(guò)來(lái)了 —— Angular 2 快速上手,這里面還有很多有關(guān)于 Angular2 的文章,感興趣的朋友可以去看一看 目前angular2已經(jīng)來(lái)到了beta版,這意味著它已經(jīng)做好了...

    singerye 評(píng)論0 收藏0
  • 使用 ES2015 開(kāi)發(fā) Angular1.x 應(yīng)用指南

    摘要:他們即不是指令,也不應(yīng)該使用組件代替指令,除非你正在用控制器升級(jí)模板指令,組件還包含數(shù)據(jù)事件的輸入與輸出,生命周期鉤子和使用單向數(shù)據(jù)流以及從父組件上獲取數(shù)據(jù)的事件對(duì)象。 showImg(https://segmentfault.com/img/bVynsJ); 關(guān)鍵詞 架構(gòu), 文件結(jié)構(gòu), 組件, 單向數(shù)據(jù)流以及最佳實(shí)踐 來(lái)自 @toddmotto 團(tuán)隊(duì)的編碼指南 Angular 的編碼...

    Andrman 評(píng)論0 收藏0
  • webpack 教程資源收集

    學(xué)習(xí)的過(guò)程中收藏了這些優(yōu)秀教程和的項(xiàng)目,希望對(duì)你有幫助。 github地址, 有不錯(cuò)的就更新 官方文檔 中文指南 初級(jí)教程 webpack-howto 作者:Pete Hunt Webpack 入門(mén)指迷 作者:題葉   webpack-demos 作者:ruanyf 一小時(shí)包教會(huì) —— webpack 入門(mén)指南 作者:VaJoy Larn   webpack 入門(mén)及實(shí)踐 作者:...

    Backache 評(píng)論0 收藏0
  • angular 1.x多項(xiàng)目共享子項(xiàng)目實(shí)踐之路

    摘要:可發(fā)布這一部分會(huì)在下一章管理對(duì)子項(xiàng)目引用中詳細(xì)說(shuō)明。總結(jié)本文總結(jié)了多項(xiàng)目共享子項(xiàng)目工程化方面的一些實(shí)踐,并不涉及到復(fù)雜的代碼,主要涉及到的概念,使用進(jìn)行包管理,使用作為自動(dòng)化工具等工程化的知識(shí)。 背景 公司的產(chǎn)品線(xiàn)涵蓋多個(gè)產(chǎn)品,這些產(chǎn)品中會(huì)有一些相同的功能,如登錄,認(rèn)證等,為了保持這些功能在各個(gè)產(chǎn)品中的一致性,我們?cè)诟鱾€(gè)產(chǎn)品中維護(hù)一份相同的代碼。這帶來(lái)了很大的不便:當(dāng)出現(xiàn)新的需求時(shí),不...

    mist14 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Olivia

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<