亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

將angular.js項(xiàng)目整合到.net mvc中的方法詳解

 更新時(shí)間:2017年06月29日 08:48:45   作者:Yitim  
這篇文章主要給大家介紹了將angular.js項(xiàng)目整合到.net mvc中的相關(guān)資料,文中通過(guò)示例代碼將實(shí)現(xiàn)的過(guò)程介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起看看吧。

前言

之前的開(kāi)發(fā)選擇的是完全舍棄服務(wù)端,僅保留最簡(jiǎn)單web服務(wù)器提供angular經(jīng)打包的靜態(tài)資源,此外所有的業(yè)務(wù)與數(shù)據(jù)請(qǐng)求都訪(fǎng)問(wèn)一個(gè)分離的WebApi來(lái)實(shí)現(xiàn)。不過(guò)最近碰到一個(gè)需求,有必要使用多個(gè)客戶(hù)端,而各客戶(hù)端本身都是webpack打包出來(lái)的js而已,沒(méi)必要每個(gè)客戶(hù)端都自己建一個(gè)站點(diǎn),這就有必要搭建一個(gè)服務(wù)端,根據(jù)參數(shù)動(dòng)態(tài)渲染不同客戶(hù)端的腳本來(lái)服務(wù)多個(gè)客戶(hù)端了。主要需要解決兩個(gè)問(wèn)題,一是防止前后端路由沖突各自有效工作,二是如何實(shí)現(xiàn)一套比較合理的部署方案?;\統(tǒng)一點(diǎn)看待這個(gè)問(wèn)題,無(wú)非就是要實(shí)現(xiàn)如題目所描述的,如何將專(zhuān)注前端的強(qiáng)大框架(angular)整合到一個(gè)健壯的現(xiàn)有服務(wù)端(.Net)項(xiàng)目中去。

Webpack配置

第一步必然是要先得到前端項(xiàng)目的打包資源,由強(qiáng)大的webpack來(lái)完成,目標(biāo)是將angular的所有依賴(lài)以及應(yīng)用主代碼分別打包到polyfill.js、vendor.js、main.js三個(gè)腳本中,以及異步懶加載的模塊各自打包成一個(gè)chunk.js。webpack博大精深,剛接觸會(huì)摸不著頭腦,好在其終究是用來(lái)給我們帶來(lái)方便的一個(gè)工具而已,使用起來(lái)是很有條理的。其主要的介紹可以移步webpack的官方文檔【https://doc.webpack-china.org 】,認(rèn)真吸收完遠(yuǎn)遠(yuǎn)足夠?qū)懗鯽ngular-webpack-starter【 https://github.com/AngularClass/angular-starter 】這樣完善的啟動(dòng)項(xiàng)目來(lái)了。

簡(jiǎn)單來(lái)說(shuō)webpack配置有四部曲:

一、 定義入口文件 包含angular的依賴(lài),angular框架代碼以及項(xiàng)目的啟動(dòng)代碼即可,比如angular-webpack-starter中的配置:

entry: {
 'polyfills': './src/polyfills.browser.ts', // 依賴(lài)項(xiàng)
 'main': AOT ? './src/main.browser.aot.ts' : './src/main.browser.ts' // 主程序
 },

二、 定義打包規(guī)則

打包規(guī)則有好一些需要配置的,包括了各種文件類(lèi)型的打包,angular模塊的打包等,配置方式見(jiàn)官方文檔或直接參照現(xiàn)成的啟動(dòng)項(xiàng)目,直接看難免懵逼,但不要怕,規(guī)則其實(shí)就那么點(diǎn),眼熟就成功了大半。

三、配置插件

webpack有非常多的插件,用來(lái)強(qiáng)化打包能力以及規(guī)則的擴(kuò)展,可以看看啟動(dòng)項(xiàng)目中用到了哪些,這些插件在官方文檔里都能找到介紹。

四、 定義輸出規(guī)則

輸出要分生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境,本文只講生產(chǎn)環(huán)境。先明確webpack打包好的項(xiàng)目是要交給服務(wù)端使用的,給出的輸出要有幾個(gè)需求:

     1) 轉(zhuǎn)義兼容瀏覽器和ES5并壓縮。

     2)輸出文件名附帶哈希值,代碼發(fā)生更改重新打包時(shí)要有不同的哈希值,保證此時(shí)替換的資源不會(huì)被瀏覽器緩存而得不到第一時(shí)間更新。

     3)列出資源打包清單,因?yàn)楦綆Я斯V祵?dǎo)致每次文件名都是很長(zhǎng)一串奇怪字符,使用合適的webpack配置附帶一個(gè)manifest清單列出都輸出了哪幾個(gè)文件,進(jìn)一步在使用時(shí)動(dòng)態(tài)讀取其中的清單來(lái)操作輸出的文件。

作為靜態(tài)腳本添加到服務(wù)端

順利的話(huà)開(kāi)發(fā)完成的項(xiàng)目能得到類(lèi)似下圖的打包資源:

其中webpack-assets.json中列出了三個(gè)依賴(lài)文件:

 

以0、1、2、3打頭的四個(gè)chunk文件是由angular動(dòng)態(tài)引入的懶加載模塊,不需要手動(dòng)引入自然也不需要列出來(lái),只需要保證angular能訪(fǎng)問(wèn)到它們即可。

把這些東西全都放到一個(gè).Net MVC項(xiàng)目中去:

 

然后在View視圖中引入三個(gè)腳本并配置base url:

 

現(xiàn)在運(yùn)行MVC項(xiàng)目,定位到這個(gè)視圖可以順利渲染出angular項(xiàng)目來(lái)。問(wèn)題在于手動(dòng)輸入前端路由的url時(shí),此url會(huì)被MVC路由視為404錯(cuò)誤(因?yàn)镸VC路由中確實(shí)未定義這一規(guī)則,真正使用此規(guī)則的angular客戶(hù)端還沒(méi)有機(jī)會(huì)解析這個(gè)url就被一個(gè)錯(cuò)誤頁(yè)取代了)。

MVC路由配置

angular官方給出的指南是給服務(wù)端配置404的重定向,將所有的404錯(cuò)誤都重定向到index.html,這樣前端就能順利開(kāi)始解析輸入的url了。在MVC中做法也類(lèi)似,只要在MVC的路由規(guī)則中,將必要路由(比如還定義了其他的Api或者錯(cuò)誤頁(yè))之外的所有請(qǐng)求都指向指定的Action,比如筆者的這條規(guī)則,將所有其他請(qǐng)求都指向AppController下的Index:

 

這樣除了/page/打頭的url外所有不滿(mǎn)足默認(rèn)路由的請(qǐng)求都會(huì)定位到/App/Index。

使用MVC的View取代index.html

下一步是要在這個(gè)/App/Index中讀取前端打包生成的webpack-assets.json清單,將需要的文件渲染到視圖中,筆者項(xiàng)目添加了一個(gè)academyid來(lái)區(qū)分多客戶(hù)端,每個(gè)客戶(hù)端都有以自己id命名的一個(gè)資源目錄,實(shí)現(xiàn)如下圖所示:

筆者的C#比較摳腳,所以定義了一個(gè)class來(lái)解析json文件,然后才把解析到的文件名放到ViewData中以供前端使用?,F(xiàn)在視圖中就可以使用Razer語(yǔ)法來(lái)渲染腳本依賴(lài):

 

這樣子配置下來(lái),服務(wù)端其實(shí)不需要再關(guān)心客戶(hù)端的更改,只關(guān)心從webpack-assets.json中解析要加載的依賴(lài),并渲染這些依賴(lài)即可,每當(dāng)客戶(hù)端代碼更改重新打包時(shí),webpack-assets.json清單也會(huì)更新,毫不影響服務(wù)端。

總結(jié)

水平有限導(dǎo)致本文存在許多的不足之處,包括一直未涉及的SEO方案以及其他的隱藏問(wèn)題,筆者還有很多需要學(xué)習(xí)完善的地方。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Angularjs實(shí)現(xiàn)下拉框聯(lián)動(dòng)的示例代碼

    Angularjs實(shí)現(xiàn)下拉框聯(lián)動(dòng)的示例代碼

    本篇文章主要介紹了Angularjs下拉框聯(lián)動(dòng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 詳解angular 中的自定義指令之詳解API

    詳解angular 中的自定義指令之詳解API

    本篇文章主要介紹了angular 中的自定義指令之詳解API,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Angular應(yīng)用程序的Hydration基本概念詳解

    Angular應(yīng)用程序的Hydration基本概念詳解

    這篇文章主要為大家介紹了Angular應(yīng)用程序的Hydration基本概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • AngularJS基礎(chǔ) ng-keypress 指令簡(jiǎn)單示例

    AngularJS基礎(chǔ) ng-keypress 指令簡(jiǎn)單示例

    本文主要介紹AngularJS ng-keypress 指令,這里幫大家整理了基礎(chǔ)資料,并附是示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • AngularJS入門(mén)教程之服務(wù)(Service)

    AngularJS入門(mén)教程之服務(wù)(Service)

    本文主要介紹 AngularJS Service,這里整理了AngularJS Servic的詳細(xì)資料,并提供代碼實(shí)例,有需要的小伙伴可以參考下
    2016-07-07
  • AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法詳解

    AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法詳解

    這篇文章主要介紹了AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了AngularJS實(shí)現(xiàn)tab選項(xiàng)卡的原理、實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • 淺談ng-zorro使用心得

    淺談ng-zorro使用心得

    這篇文章主要介紹了淺談ng-zorro使用心得,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • angularjs路由傳值$routeParams詳解

    angularjs路由傳值$routeParams詳解

    這篇文章主要為大家詳細(xì)介紹了angularjs路由傳值$routeParams的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 利用Angularjs實(shí)現(xiàn)幻燈片效果

    利用Angularjs實(shí)現(xiàn)幻燈片效果

    AngularJS是Google開(kāi)發(fā)的純客戶(hù)端JavaScript技術(shù)的WEB框架,用于擴(kuò)展、增強(qiáng)HTML功能,它專(zhuān)為構(gòu)建強(qiáng)大的WEB應(yīng)用而設(shè)計(jì)。下面這篇文章我們來(lái)分享如何利用Angularjs實(shí)現(xiàn)幻燈片效果。
    2016-09-09
  • AngularJS基礎(chǔ) ng-src 指令簡(jiǎn)單示例

    AngularJS基礎(chǔ) ng-src 指令簡(jiǎn)單示例

    本文主要介紹AngularJS ng-src 指令,這里對(duì)ng-src 指令的資料做了詳細(xì)整理,有需要的小伙伴可以參考下
    2016-08-08

最新評(píng)論