怎么做網(wǎng)頁上小廣告合肥seo整站優(yōu)化網(wǎng)站
鶴壁市浩天電氣有限公司
2026/01/24 14:05:03
怎么做網(wǎng)頁上小廣告,合肥seo整站優(yōu)化網(wǎng)站,長沙網(wǎng)站制作服務(wù),平面設(shè)計素材網(wǎng)文章目錄
1. Web標(biāo)準(zhǔn)2. HTML 2.1 HTML 簡介2.2 HTML 特點2.3 HTML 基本標(biāo)簽 3. CSS 3.1 CSS 簡介3.2 CSS 引入方式3.3 CSS 選擇器3.4 盒子模型3.5 CSS 基本屬性 4. JavaScript 4.1 JavaScript 簡介4.2 JS 引入方式4.3 JS 基礎(chǔ)語法 4.3.1 書寫語法4.3.2 變量4.3.3 數(shù)據(jù)類型4.3.…文章目錄1. Web標(biāo)準(zhǔn)2. HTML2.1 HTML 簡介2.2 HTML 特點2.3 HTML 基本標(biāo)簽3. CSS3.1 CSS 簡介3.2 CSS 引入方式3.3 CSS 選擇器3.4 盒子模型3.5 CSS 基本屬性4. JavaScript4.1 JavaScript 簡介4.2 JS 引入方式4.3 JS 基礎(chǔ)語法4.3.1 書寫語法4.3.2 變量4.3.3 數(shù)據(jù)類型4.3.4 運算符4.3.5 流程控制語句4.4 JS 函數(shù)4.5 JS 對象4.5.1 基本對象4.5.1.1 Array 對象4.5.1.2 String 對象4.5.1.3 JSON 對象4.5.2 BOM 對象4.5.2.1 Window 對象4.5.2.2 Location 對象4.5.3 DOM 對象4.6 JS 事件監(jiān)聽5. Vue5.0 引言5.1 Vue 簡介5.2 Vue 初體驗5.3 Vue 指令5.4 Vue 生命周期5.5 Vue 路由6. Ajax6.1 原生 Ajax6.2 Axios7. 前后端分離開發(fā)7.1 開發(fā)方式簡介7.2 YApi7.3 前端工程化8. Element9. 打包部署1. Web標(biāo)準(zhǔn)Web標(biāo)準(zhǔn)也稱為網(wǎng)頁標(biāo)準(zhǔn)由一系列的標(biāo)準(zhǔn)組成大部分由W3C World Wide Web Consortium萬維網(wǎng)聯(lián)盟負責(zé)制定。三個組成部分HTML負責(zé)網(wǎng)頁的結(jié)構(gòu)頁面元素和內(nèi)容。CSS負責(zé)網(wǎng)頁的表現(xiàn)頁面元素的外觀、位置等頁面樣式如顏色、大小等。JavaScript負責(zé)網(wǎng)頁的行為交互效果。文檔查閱w3school 在線教程2. HTML2.1 HTML 簡介HTMLHyperTextMarkupLanguage超文本標(biāo)記語言。超文本超越了文本的限制比普通文本更強大。除了文字信息還可以定義圖片、音頻、視頻等內(nèi)容。標(biāo)記語言由標(biāo)簽構(gòu)成的語言。2.2 HTML 特點HTML標(biāo)簽不區(qū)分大小寫HTML屬性值單雙引號都可以建議使用雙引號HTML語法松散在HTML頁面中無論輸入了多少個空格, 最多只會顯示一個。 可以使用空格占位符nbsp來生成空格如果需要多個空格就使用多次占位符。2.3 HTML 基本標(biāo)簽以下羅列了一下最常見的 HTML 標(biāo)簽需要其他標(biāo)簽可以查閱官方文檔 HTML 標(biāo)簽參考手冊 (w3school.com.cn)標(biāo)題標(biāo)簽h1…/h1h1 → h6 重要程度依次降低段落標(biāo)簽p換行標(biāo)簽br水平線標(biāo)簽hr文本加粗標(biāo)簽b strong文本傾斜標(biāo)簽i em圖片標(biāo)簽img src width height絕對路徑絕對磁盤路徑D:/xxxx、絕對網(wǎng)絡(luò)路徑https://xxxx相對路徑從當(dāng)前文件開始查找./ : 當(dāng)前目錄, …/ : 上級目錄超鏈接標(biāo)簽a href targethref指定資源訪問的urltarget指定在何處打開資源鏈接self默認值在當(dāng)前頁面打開_blank在空白頁面打開視頻標(biāo)簽video scr controls width heightsrc規(guī)定視頻的urlcontrols顯示播放控件音頻標(biāo)簽audio scr controlssrc規(guī)定音頻的urlcontrols顯示播放控件表格標(biāo)簽table boder width cellspacing定義表格整體可以包裹多個trborder規(guī)定表格邊框的寬度width規(guī)定表格的寬度cellspacing規(guī)定單元格之間的空間tr定義表格鐘的行可以包裹多個tdtd定義表格單元格可以包裹內(nèi)容特殊地表頭單元格使用th具有加粗居中效果表單標(biāo)簽在網(wǎng)頁中主要負責(zé)數(shù)據(jù)采集功能如注冊、登錄等數(shù)據(jù)采集form action methodaction規(guī)定當(dāng)提交表單時向何處發(fā)送表單數(shù)據(jù)URLmethod規(guī)定用于發(fā)送表單數(shù)據(jù)的方式。GET、POSTGET表單數(shù)據(jù)是拼接在url后面的 如 xxxxxxxxxxx?usernameTomage12url中能攜帶的表單數(shù)據(jù)大小是有限制的POST 表單數(shù)據(jù)是在請求體消息體中攜帶的大小沒有限制表單項標(biāo)簽input type name value定義表單項通過type屬性控制輸入形式type取值描述text默認值定義單行的輸入字段password定義密碼字段radio定義單選按鈕checkbox定義復(fù)選框file定義文件上傳按鈕date/time/datetime-local定義日期/時間/日期時間number定義數(shù)字輸入框email定義郵件輸入框hidden定義隱藏域submit / reset / button定義提交按鈕 / 重置按鈕 / 可點擊按鈕select name定義下拉列表option value定義列表項。textarea name定義文本域表單中的所有表單項要想能夠正常的采集數(shù)據(jù)在提交的時候能提交到服務(wù)端表單項必須指定name屬性。 否則無法提交該表單項。服務(wù)器接收到的數(shù)據(jù)是value的值。submit和reset、button的value值決定按鈕上顯示的是什么布局標(biāo)簽div span3. CSS3.1 CSS 簡介CSSCascadingStyleSheet層疊樣式表用于控制頁面的樣式表現(xiàn)。3.2 CSS 引入方式行內(nèi)樣式寫在標(biāo)簽的style屬性中不推薦h1 stylexxx: xxx; xxx: xxx;中國新聞網(wǎng)/h1內(nèi)嵌樣式寫在style標(biāo)簽中可以寫在頁面任何位置但通常約定寫在head標(biāo)簽中style h1 { xxx: xxx; } /style外聯(lián)樣式寫在一個單獨的.css文件中需要通過 link 標(biāo)簽在網(wǎng)頁中引入link relstylesheet hrefcss/news.css3.3 CSS 選擇器元素選擇器標(biāo)簽名 { … }id選擇器#id屬性值 { … }類選擇器.class屬性值 { … }優(yōu)先級id選擇器 類選擇器 元素選擇器3.4 盒子模型盒子頁面中所有的元素標(biāo)簽都可以看做是一個盒子由盒子將頁面中的元素包含在一個矩形區(qū)域內(nèi)通過盒子的視角更方便的進行頁面布局盒子模型組成內(nèi)容區(qū)域content、內(nèi)邊距區(qū)域padding、邊框區(qū)域border、外邊距區(qū)域margin布局標(biāo)簽實際開發(fā)網(wǎng)頁中會大量頻繁的使用div和span這兩個沒有語義的布局標(biāo)簽div標(biāo)簽一行只顯示一個獨占一行寬度默認是父元素的寬度高度默認由內(nèi)容撐開可以設(shè)置寬高width、heightspan標(biāo)簽一行可以顯示多個寬度和高度默認由內(nèi)容撐開不可以設(shè)置寬高width、heightwidth設(shè)置寬度可以是像素可以是百分比百分比相對父元素height設(shè)置高度可以是像素可以是百分比百分比相對父元素border設(shè)置邊框的屬性如1px solid #000padding內(nèi)邊距margin外邊距注意如果只需要設(shè)置某一個方位的邊框、內(nèi)邊距、外邊距可以在屬性名后加上 –位置如padding-top、padding-left、padding-right …3.5 CSS 基本屬性下面提供了一些最基本的 CSS 屬性如需其他屬性可以查閱官方文檔 CSS 參考手冊 (w3school.com.cn)color設(shè)置文本的顏色有以下三種表示方式表示方式表示含義取值關(guān)鍵字預(yù)定義的顏色名red、green、bluergb表示法紅綠藍三原色取值范圍0-255rgb(255,255,255)十六進制表示法#開頭用十六進制表示#000000 #000font-size字體大小 注意記得加pxtext-decoration規(guī)定添加到文本的修飾none表示定義標(biāo)準(zhǔn)的文本line-height設(shè)置行高text-indent定義第一個行內(nèi)容的縮進text-align規(guī)定元素中的文本的水平對齊方式4. JavaScript4.1 JavaScript 簡介JavaScript簡稱JS 是一門跨平臺、面向?qū)ο蟮哪_本語言不需要編譯由瀏覽器解釋執(zhí)行。是用來控制網(wǎng)頁行為的它能使網(wǎng)頁可交互。JavaScript 和 Java 是完全不同的語言不論是概念還是設(shè)計但是基礎(chǔ)語法類似。JavaScript 在 1995 年由 Brendan Eich 發(fā)明并于 1997 年成為 ECMA 標(biāo)準(zhǔn)。ECMAScript6 (ES6) 是最主流的 JavaScript 版本發(fā)布于 2015 年)。ECMA ECMA 國際前身為歐洲計算機制造商協(xié)會制定了標(biāo)準(zhǔn)化的腳本程序設(shè)計語言 ECMAScript這種語言得到廣泛應(yīng)用。而 JavaScript 是遵守 ECMAScript 的標(biāo)準(zhǔn)的。4.2 JS 引入方式內(nèi)部腳本將JS代碼定義在HTML頁面中JavaScript代碼必須位于script/script標(biāo)簽之間在HTML文檔中可以在任意地方放置任意數(shù)量的script一般會把腳本置于body元素的底部可改善顯示速度外部腳本將 JS 代碼定義在外部 JS 文件中然后引入到 HTML 頁面中外部 JS 文件中只包含 JS 代碼不包含script標(biāo)簽script標(biāo)簽不能自閉合否則不生效script srcjs/demo.js/script4.3 JS 基礎(chǔ)語法4.3.1 書寫語法除了分號可有可無其他地方和 Java 基本類似區(qū)分大小寫與 Java 一樣變量名、函數(shù)名以及其他一切東西都是區(qū)分大小寫的每行結(jié)尾的分號可有可無建議加上注釋單行注釋// 注釋內(nèi)容多行注釋/* 注釋內(nèi)容 */大括號表示代碼塊JS 的三種輸出語句api描述window.alert()寫入警告框瀏覽器彈出警告框window可省略document.write()寫入 HTML 輸出在瀏覽器展示console.log()寫入瀏覽器控制臺在控制臺顯示4.3.2 變量變量的聲明和 Java 有很大的不同JS 主要使用以下三種關(guān)鍵字來聲明變量關(guān)鍵字解釋var聲明變量全局作用域/函數(shù)作用域允許重復(fù)聲明let聲明變量塊級作用域不允許重復(fù)聲明const聲明常量一旦聲明常量的值不能改變注意在 JS 中被 const 修飾的簡單類型或者說是基本類型是不能發(fā)生改變的但是被 const 修飾的引用數(shù)據(jù)類型的內(nèi)容是可以被修改的因為 const 僅限制了指向的值不可更改而不限制其指向的對象內(nèi)容不可更改。JavaScript 是一門弱類型語言變量可以存放不同類型的值 。變量名需要遵循如下規(guī)則組成字符可以是任何字母、數(shù)字、下劃線_或美元符號$數(shù)字不能開頭建議使用駝峰命名script //同一變量可以存放不同類型的值 var a 10; a 張三; alert(a); //var全局變量可以重復(fù)定義 { var x 1; var x A; } alert(x); //let局部變量只在代碼塊內(nèi)有效不能重復(fù)定義 { let x 1; } alert(x); //報錯 //const常量一旦聲明常量的值就不能改變 const pi 3.14; pi 3.15; //報錯 alert(pi); /script4.3.3 數(shù)據(jù)類型JavaScript中分為原始類型和引用類型。原始類型number數(shù)字整數(shù)、小數(shù)、NaN(Not a Number)string字符串單雙引號都可以boolean布爾。truefalsenull對象為空undefined當(dāng)聲明的變量未初始化時該變量的默認值是 undefined既然 JavaScript 中的變量不聲明類型我們怎么知道數(shù)據(jù)是什么類型呢我們可以使用typeof運算符可以獲取數(shù)據(jù)類型var a 20; alert(typeof a);4.3.4 運算符算術(shù)運算符 , - , * , / , % , , –賦值運算符 , , - , * , / , %比較運算符 , , , , ! ,,邏輯運算符 , || , !三元運算符條件表達式 ? true_value: false_value運算符和 Java 幾乎完全一致值得注意一下只比較值是否相等不區(qū)分?jǐn)?shù)據(jù)類型哪怕類型不一致也會自動轉(zhuǎn)換類型進行值得比較不光比較值還要比較數(shù)據(jù)類型如果類型不一致直接返回 falsevar age 20; var _age 20; var $age 20; alert(age _age);//true 只比較值 alert(age _age);//false 類型不一樣 alert(age $age);//true 類型一樣值一樣在 JavaScript 中雖然不區(qū)分?jǐn)?shù)據(jù)類型但有時涉及數(shù)值運算我們希望得到數(shù)值類型可以進行類型轉(zhuǎn)換JS 為我們提供了這樣的函數(shù)。字符串類型轉(zhuǎn)為數(shù)字parseInt()將字符串字面值轉(zhuǎn)為數(shù)字。 如果字面值不是數(shù)字則轉(zhuǎn)為 NaN。// 類型轉(zhuǎn)換 - 其他類型轉(zhuǎn)為數(shù)字 alert(parseInt(12)); //12 alert(parseInt(12A45)); //12 識別到不是數(shù)字停止 alert(parseInt(A45));//NaN (not a number)在 JS 中還有非常重要的一點是0,NaN,null,undefined,,可以理解成 false,反之理解成 true。Number0 和 NaN 為 false其他均轉(zhuǎn)為 true。String空字符串為 false其他均轉(zhuǎn)為 true。null和undefined均轉(zhuǎn)為 false。if(NaN){//false alert(NaN 轉(zhuǎn)換為false); }4.3.5 流程控制語句流程控制語句與 Java 中完全一樣此處不再贅述if…else if …else…switchforwhiledo … while4.4 JS 函數(shù)Java 中通過方法提高代碼的復(fù)用性在 JavaScript 中可以使用函數(shù)完成類似的事情JavaScript 使用function關(guān)鍵字定義函數(shù)有兩種定義語法//方式一 function functionName(參數(shù)1,參數(shù)2..){ //要執(zhí)行的代碼 } //方式二 var functionName function (參數(shù)1,參數(shù)2..){ //要執(zhí)行的代碼 }需要注意與 Java 中不同的 JS 函數(shù)特性形式參數(shù)不需要類型。因為 JavaScript 是弱類型語言返回值也不需要類型可以在函數(shù)內(nèi)部直接使用 return 返回即可在函數(shù)的調(diào)用上與 Java 類似直接函數(shù)名(參數(shù)列表)但是在 JavaScript 中函數(shù)的調(diào)用只需要名稱正確即可函數(shù)調(diào)用可以傳遞任意個數(shù)的參數(shù)。function add( a, b) { return a b; } var res add(10, 20, 30, 40); alert(res); //結(jié)果為30多余的參數(shù)直接忽略4.5 JS 對象JavaScript 中有很多對象可以參考官方文檔 JavaScript 和 HTML DOM 參考手冊 (w3school.com.cn)這些對象大致可以分為三類分別是基本對象在這里主要學(xué)習(xí) Array 和 JSON 和 StringBOM 對象主要是和瀏覽器相關(guān)的幾個對象DOM對象JavaScript 中將 html 的每一個標(biāo)簽都封裝成一個對象4.5.1 基本對象4.5.1.1 Array 對象JavaScript 中 Array 對象用于定義數(shù)組相當(dāng)于 Java 中集合但數(shù)組的長度是可變的JavaScript 又是弱類型語言所以可以存儲任意類型的數(shù)據(jù)。常用定義語法有以下兩種//方式一 var arr new Arrary( 1, 喝喝, true, 10); //方式二更簡潔 var arr [1, 喝喝, true, 10];數(shù)組定義好了該如何獲取數(shù)組里面的值呢和 Java 一樣通過索引arr[1]來獲取值。需要注意與 Java 不同的特點長度可變存儲任意類型var arr [1,2,3,4]; arr[10] 50; //長度可變 console.log(arr[9]); //未定義的部分是 undefined arr[9] A; //添加不同類型的值 arr[8] true; console.log(arr);作為一個對象官方文檔中提供了許多 Array 的屬性和函數(shù)在這里只列出最常用的屬性和函數(shù)。屬性描述length設(shè)置或返回數(shù)組中元素的數(shù)量。length屬性length 屬性可以用來獲取數(shù)組的長度我們可以用來遍歷數(shù)組中的元素var arr [1,2,3,4]; arr[10] 50; for (let i 0; i arr.length; i) { console.log(arr[i]); }還有一種遍歷方式可以使用以下語法for(const i in arr) { console.log(i); // i僅僅是索引 console.log(arr[i]); // arr[i]才是數(shù)組值 }函數(shù)描述forEach()遍歷數(shù)組中的每個有值元素并調(diào)用一次傳入的函數(shù)。push()將新元素添加到數(shù)組的末尾并返回新的長度。splice()從數(shù)組中刪除元素。forEach()函數(shù)這個函數(shù)是用來遍歷的那么遍歷的目的是做什么所以這個方法的參數(shù)需要傳遞一個函數(shù)每次遍歷都會執(zhí)行這個函數(shù)而且這個函數(shù)接受一個參數(shù)就是遍歷時數(shù)組元素的值。修改之前的遍歷代碼如下//e是形參接收的是數(shù)組遍歷時元素的值 //每次遍歷都將數(shù)組元素傳給 function 函數(shù)并執(zhí)行 arr.forEach(function(e){ console.log(e); })在 ES6 中為了簡化函數(shù)定義的語法引入箭頭函數(shù)的寫法語法類似 Java 中 lambda 表達式具體形式為:(…) { … }如果需要給箭頭函數(shù)起名字var xxx (…) { … }修改上述代碼如下arr.forEach((e) { console.log(e); })既然都是遍歷那么 forEach() 函數(shù)和 for 循環(huán)遍歷結(jié)果一致嗎答案是不一致對于 forEach() 函數(shù)來說沒有元素的內(nèi)容是不會輸出的forEach() 只會遍歷有值的元素而 for 循環(huán)會遍歷數(shù)組中的每一個值具體使用哪一個要看使用場景是否需要空值元素。push()函數(shù)這個函數(shù)用于向數(shù)組的末尾添加元素其中函數(shù)的參數(shù)就是需要添加的元素arr.push(7,8,9); console.log(arr);splice()函數(shù)這個函數(shù)用來刪除數(shù)組中的元素函數(shù)中填入2個參數(shù)。參數(shù)1表示從哪個索引位置刪除參數(shù)2表示刪除元素的個數(shù)//從索引2的位置開始刪刪除2個元素 arr.splice(2,2); console.log(arr);4.5.1.2 String 對象JavaScript 中 String 對象用于定義字符串和 Java 類似。常用定義語法有以下兩種//方式一 var str new String(Hello String); //方式二更加簡潔 var str Hello String;String 對象也提供了許多屬性和函數(shù)在這里我們介紹一些最常用的屬性描述length返回字符串的長度。length屬性可以用于返回字符串的長度console.log(str.length);函數(shù)描述charAt()返回在指定位置的字符。indexOf()檢索字符串返回起始索引。trim()去除字符串兩邊的空格。substring()提取字符串中兩個指定的索引號之間的字符。charAt()函數(shù)用于返回在指定索引位置的字符函數(shù)的參數(shù)就是索引console.log(str.charAt(4));indexOf()函數(shù)用于檢索指定內(nèi)容在字符串中的索引位置的返回值是索引參數(shù)是指定的內(nèi)容console.log(str.indexOf(llo));trim()函數(shù)用于去除字符串兩邊的空格的返回一個新字符串var str Hello String ; var s str.trim(); console.log(s.length);sustring()函數(shù)用于截取字符串的函數(shù)有2個參數(shù)。和 Java 一樣包頭不包尾。參數(shù)1表示從哪個索引位置開始截取。參數(shù)2表示到哪個索引位置結(jié)束。console.log(s.substring(0,5));4.5.1.3 JSON 對象介紹 JSON 之前我們需要先來介紹一下 JavaScript 的自定義對象類似 Java 的類或 C 的結(jié)構(gòu)體在 JS 中自定義對象非常簡單其語法格式如下var 對象名 { 屬性名1: 屬性值1, 屬性名2: 屬性值2, 屬性名3: 屬性值3, 函數(shù)名稱: function(形參列表){} };我們可以通過對象名.屬性名獲取屬性通過對象名.函數(shù)名()調(diào)用函數(shù)下面是一個自定義對象示例var user { name: Tom, age: 10, gender: male, // eat: function(){ // console.log(用膳~); // } //函數(shù)定義語法可以簡化成這樣類似 C 中的函數(shù) eat() { console.log(用膳~); } }了解了 JS 的自定義對象接下來有請我們的 JSON 隆重登場。JavaScriptObjectNotationJavaScript對象標(biāo)記法。是通過 JavaScript 對象標(biāo)記法書寫的文本。其格式如下{ key:value, key:value, key:value }需要注意的是key 必須使用雙引號標(biāo)記value可以是任意數(shù)據(jù)類型。在互聯(lián)網(wǎng)中有許多 JSON 在線解析網(wǎng)站大家可以在搜索引擎中搜索試試。那么 JSON 這種數(shù)據(jù)格式的文本應(yīng)用在什么地方呢經(jīng)常用作前后臺交互的數(shù)據(jù)載體。如下圖所示前后臺交互時我們需要傳輸數(shù)據(jù)但是 Java 中的對象我們該怎么去描述呢我們可以使用如圖所示的 xml 格式可以清晰的描述 Java 中需要傳遞給前端的 Java 對象。很明顯 xml 格式存在如下問題標(biāo)簽需要編寫雙份標(biāo)簽甚至比數(shù)據(jù)還多占用帶寬浪費資源解析繁瑣所以我們可以使用 JSON 來替代相比 xmlJSON是一種非常高效的數(shù)據(jù)格式如下圖所示我們可以采用如下方式定義 JSON//整個 JSON 字符串用 //字符串用 //數(shù)字直接寫 //布爾值直接寫 true false //數(shù)組用 [] 圍起來 //對象用 {} 圍起來 var userStr {name:Jerry,age:18, address:[北京,上海]}; //這里不能換行定義好了 JSON接下來我們訪問 JSON 中的內(nèi)容alert(userStr.name)瀏覽器輸出了 undefined為什么這是因為上述定義是一個 JSON 字符串而不是 JSON 對象。JS 為我們提供了對它們進行轉(zhuǎn)換的函數(shù)JSON.parse()函數(shù)將 JSON 字符串轉(zhuǎn)換為 JSON 對象返回一個對象需要接收var jsObject JSON.parse(userStr);JSON.stringify()對象將 JSON 對象轉(zhuǎn)換為 JSON 字符串返回一個字符串需要接收var jsonStr JSON.stringify(jsObject);4.5.2 BOM 對象接下來我們學(xué)習(xí) BOM 對象BOM 的全稱是 Browser Object Model翻譯過來是瀏覽器對象模型。JavaScript將瀏覽器的各個組成部分封裝成了對象允許 JavaScript 與瀏覽器對話。我們要操作瀏覽器的部分功能可以通過操作 BOM 對象的相關(guān)屬性或者函數(shù)來完成。BOM 提供了如下五個對象對象名稱描述Window瀏覽器窗口對象Navigator瀏覽器對象Screen屏幕對象History歷史記錄對象Locationd地址欄對象在此我們重點介紹 Window 和 Location 對象4.5.2.1 Window 對象window 對象指的是瀏覽器窗口對象window 對象是全局對象所以對于 window 對象我們可以直接使用并且對于 window 對象的函數(shù)和屬性我們可以省略window.。例如我們之前學(xué)習(xí)的 alert() 函數(shù)其實是屬于 window 對象的其完整的代碼如下window.alert(hello);所以對于 window 對象的屬性和函數(shù)我們都是采用簡寫的方式。window 提供了很多屬性下表列出了常用屬性window 對象提供了獲取其他BOM對象的屬性屬性描述history對 History 對象的只讀引用。請參閱 History 對象 。location用于窗口或框架的 Location 對象。請參閱 Location對象。navigator對 Navigator 對象的只讀引用。請參閱 Navigator對象。screen用于獲取Screen對象也就是說我們要使用 location 對象只需要通過代碼window.location或者簡寫location即可使用。window也提供了一些常用的函數(shù)如下表格所示函數(shù)描述alert()顯示帶有一段消息和一個確認按鈕的警告框。comfirm()顯示帶有一段消息以及確認按鈕和取消按鈕的對話框。setInterval()按照指定的周期以毫秒計來調(diào)用函數(shù)或計算表達式。setTimeout()在指定的毫秒數(shù)后調(diào)用函數(shù)或計算表達式。alert()函數(shù)彈出警告框函數(shù)的內(nèi)容就是警告框的內(nèi)容。alert(Hello BOM Window);comfirm()函數(shù)彈出確認框函數(shù)的內(nèi)容就是確認框的內(nèi)容并且提供用戶2個按鈕分別是確認和取消。confirm(您確認刪除該記錄嗎?);但是我們怎么知道用戶點擊了確認還是取消呢所以這個函數(shù)有一個返回值當(dāng)用戶點擊確認時返回值為 true點擊取消時返回值為 false。我們根據(jù)返回值來決定是否執(zhí)行后續(xù)操作。修改代碼如下可以查看返回值 true 或者 false。var flag confirm(您確認刪除該記錄嗎?); alert(flag);setInterval()函數(shù)定時器用于周期性的執(zhí)行某個功能并且是循環(huán)執(zhí)行。該函數(shù)需要傳遞2個參數(shù)參數(shù)1函數(shù)需要周期性執(zhí)行的功能代碼參數(shù)2間隔時間單位毫秒//定時器 - setInterval -- 周期性的執(zhí)行某一個函數(shù) var i 0; setInterval(function(){ i; console.log(定時器執(zhí)行了i次); },2000);setTimeout()函數(shù)定時器只會在一段時間后執(zhí)行一次功能。參數(shù)和上述setInterval一致。//定時器 - setTimeout -- 延遲指定時間執(zhí)行一次 setTimeout(function(){ alert(JS); },3000);4.5.2.2 Location 對象location 是指代瀏覽器的地址欄對象使用 window.location 獲取其中window.可以省略。對于這個對象我們常用的是 href 屬性用來獲取或者設(shè)置瀏覽器的地址欄信息。//獲取瀏覽器地址欄信息 alert(location.href); //設(shè)置瀏覽器地址欄信息設(shè)置之后瀏覽器自動跳轉(zhuǎn)指定地址 location.href https://www.baidu.com;4.5.3 DOM 對象DOMDocumentObjectModel 文檔對象模型JavaScript 將 HTML 文檔的各個組成部分封裝為對應(yīng)的對象Core DOM - 所有文檔類型的標(biāo)準(zhǔn)模型Document整個文檔對象Element元素對象Attribute屬性對象Text文本對象Comment注釋對象XML DOM - XML 文檔的標(biāo)準(zhǔn)模型HTML DOM - HTML 文檔的標(biāo)準(zhǔn)模型ImageButton …在這里我們主要學(xué)習(xí) HTML DOMHTML DOM 將所有的 HTML 標(biāo)簽都封裝成了對象具體的屬性和函數(shù)可以查閱 JavaScript 和 HTML DOM 參考手冊 (w3school.com.cn)DOM 的主要作用如下改變 HTML 元素的內(nèi)容改變 HTML 元素的樣式CSS對 HTML DOM 事件作出反應(yīng)添加和刪除 HTML 元素總之就是達到動態(tài)改變頁面效果目的學(xué)習(xí) DOM核心就是兩點獲取 DOM 中的元素對象Element對象 也就是標(biāo)簽操作 Element 對象的屬性也就是標(biāo)簽的屬性。首先就是如何獲取 DOM 對象HTML 中的 Element 對象可以通過 Document 對象獲取而 Document 對象是通過 window 對象獲取的window 可以省略。Document 對象中提供了以下獲取 Element 元素對象的函數(shù)函數(shù)描述document.getElementById()根據(jù) id 屬性值獲取返回單個 Element 對象document.getElementsByTagName()根據(jù)標(biāo)簽名稱獲取返回 Element 對象數(shù)組document.getElementsByName()根據(jù) name 屬性值獲取返回 Element 對象數(shù)組document.getElementsByClassName()根據(jù) class 屬性值獲取返回 Element 對象數(shù)組如下代碼是通過 id 獲取 id 值為 “h1” 的元素對象返回給變量 hvar h document.getElementById(h1);這些函數(shù)都非常簡單在這里不再一一演示需要注意的是其他三個獲取方式由于并不唯一返回的都是對象數(shù)組需要使用下標(biāo)取出對應(yīng)的對象。獲取到對象之后如何操作標(biāo)簽的屬性呢通過查閱文檔在這里演示一個修改標(biāo)簽內(nèi)容var divs document.getElementsByClassName(content); var div1 divs[0]; div1.innerHTML 666;4.6 JS 事件監(jiān)聽什么是事件呢HTML 事件是發(fā)生在 HTML 元素上的 “事情”例如按鈕被點擊鼠標(biāo)移到元素上輸入框失去焦點…而我們可以給這些事件綁定函數(shù)當(dāng)事件觸發(fā)時執(zhí)行相應(yīng)的代碼完成對應(yīng)的功能這就是事件監(jiān)聽是 JS 非常重要的一部分。JavaScript 提供了兩種事件綁定方式方式一通過 HTML標(biāo)簽中的事件屬性進行綁定input typebutton onclickon() value按鈕1 script function on(){ alert(我被點擊了!); } /script方式二通過 DOM 中 Element 元素的事件屬性進行綁定input typebutton idbtn value按鈕2 script document.getElementById(btn).onclickfunction(){ alert(我被點擊了!); } /script除了以上演示的點擊事件以下再列出一些常用事件事件說明onclick鼠標(biāo)點擊元素onblur元素失去焦點onfocus元素獲得焦點onload某個頁面或圖像被完成加載onsubmit當(dāng)表單提交時觸發(fā)該事件onmouseover鼠標(biāo)移到某元素上onmouseout鼠標(biāo)從某元素移開更多的事件在文檔中查閱 HTML DOM 事件 (w3school.com.cn)5. Vue5.0 引言通過上述學(xué)習(xí)的 HTML CSS JS 已經(jīng)能夠開發(fā)美觀的頁面了但是開發(fā)的效率還有待提高那么如何提高呢一個完整的 HTML 頁面包括了視圖和數(shù)據(jù)數(shù)據(jù)是通過請求從后臺獲取的那么意味著我們需要將后臺獲取到的數(shù)據(jù)呈現(xiàn)到頁面上這就需要我們使用 DOM 操作。正因為這種開發(fā)流程所以我們引入了一種叫做MVVM(Model-View-ViewModel)的前端開發(fā)思想即讓我們開發(fā)者更加關(guān)注數(shù)據(jù)而非數(shù)據(jù)綁定到視圖這種機械化的操作。那么具體什么是MVVM思想呢MVVMModel-View-ViewModel 的縮寫Model: 數(shù)據(jù)模型特指前端中通過請求從后臺獲取的數(shù)據(jù)View: 視圖用于展示數(shù)據(jù)的頁面可以理解成我們的 HTML CSS 搭建的頁面但是沒有數(shù)據(jù)ViewModel: 數(shù)據(jù)綁定到視圖負責(zé)將數(shù)據(jù)Model通過 JavaScript 的 DOM 技術(shù)將數(shù)據(jù)展示到視圖View上如圖所示就是 MVVM 開發(fā)思想的含義基于上述的 MVVM 思想其中的 Model 我們可以通過Ajax來發(fā)起請求從后臺獲取對于 View 部分我們在下一個章節(jié)會學(xué)習(xí)一款ElementUI框架替代 HTML CSS 來更加方便的搭建 View而接下來我們要學(xué)習(xí)的就是側(cè)重于 ViewModel 部分開發(fā)的Vue前端框架用來替代 JavaScript 的 DOM 操作讓數(shù)據(jù)展示到視圖的代碼開發(fā)變得更加的簡單。可以簡單到什么程度呢可以參考下圖對比在更加復(fù)雜的 DOM 操作中Vue 只會變得更加的簡單在上述的代碼中我們看不到之前的DOM操作因為 Vue 全部幫我們封裝好了。5.1 Vue 簡介接下來正式開始學(xué)習(xí) Vue目前最新版本為 Vue3但目前企業(yè)大多還在使用 Vue2所以在這里我們?nèi)匀粚W(xué)習(xí) Vue2。官網(wǎng)Vue.js (vuejs.org)Vue.js讀音 /vju?/, 類似于 view 是一套構(gòu)建用戶界面的漸進式框架。與其他重量級框架不同的是Vue 采用自底向上增量開發(fā)的設(shè)計。Vue 基于 MVVM 思想實現(xiàn)數(shù)據(jù)的雙向綁定將編程的關(guān)注點放在數(shù)據(jù)上。Vue 的核心庫只關(guān)注視圖層并且非常容易學(xué)習(xí)非常容易與其它庫或已有項目整合。Vue.js 的目標(biāo)是通過盡可能簡單的 API 實現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件??蚣芗词且粋€半成品軟件是一套可重用的、通用的、軟件基礎(chǔ)代碼模型。基于框架進行開發(fā)更加快捷、更加高效。5.2 Vue 初體驗第一步將官方提供的 vue.js 文件放在專門存放 js 文件的 js 目錄下第二步編寫script src../js/vue.js/script第三步在 js 代碼區(qū)定義 Vue 對象,代碼如下el:用來指定哪些標(biāo)簽被 Vue 管理類似 CSS 標(biāo)簽選擇器。data:用來定義數(shù)據(jù)模型。methods:用來定義函數(shù)。new Vue({ //里面是一個對象所以使用 {} el: #app, // app 是受管理的標(biāo)簽的 id 屬性值 data:{ // 數(shù)據(jù)模型 message: Hello Vue } })第四步編寫視圖其中{{}}是插值表達式用來將 Vue 對象中定義的 data 展示到頁面上的div idapp input typetext v-modelmessage {{message}} /div插值表達式{{ 表達式 }}。內(nèi)容可以是變量算術(shù)運算 三元運算符 函數(shù)調(diào)用以上代碼實現(xiàn)的效果就是輸入框輸入什么后面的元素就顯示什么Vue 對象數(shù)據(jù)模型 data 中的 message 和視圖中的 message 雙向綁定互相影響。5.3 Vue 指令在上述 Vue 體驗中有一個沒有學(xué)過的屬性v-modelHTML 標(biāo)簽上帶有 v- 前綴的特殊屬性這個就是 Vue 的指令。在 Vue 中通過大量的指令來實現(xiàn)數(shù)據(jù)綁定到視圖的所以接下來我們學(xué)習(xí)一些 Vue 的常用指令如下表所示指令作用v-bind為 HTML 標(biāo)簽綁定屬性值如設(shè)置 href , css 樣式等v-model在表單元素上創(chuàng)建雙向數(shù)據(jù)綁定v-on為 HTML 標(biāo)簽綁定事件v-if條件性的渲染某元素判定為 true 時渲染,否則不渲染v-else-ifv-elsev-show根據(jù)條件展示某元素區(qū)別在于切換的是 display 屬性的值v-for列表渲染遍歷容器的元素或者對象的屬性v-bind為 HTML 標(biāo)簽綁定屬性值語法使用v-bind:屬性名或者直接使用:屬性名當(dāng) Vue 對象中的數(shù)據(jù)模型發(fā)生變化時標(biāo)簽的屬性值會隨之發(fā)生變化。//兩種寫法都可以 a v-bind:hrefurl鏈接1/a a :hrefurl鏈接2/a script new Vue({ el: #app, //vue接管區(qū)域 data:{ url: https://www.baidu.com } }) /script /htmlv-model在表單元素上創(chuàng)建雙向數(shù)據(jù)綁定Vue對象的 data 屬性中的數(shù)據(jù)變化視圖展示會一起變化視圖數(shù)據(jù)發(fā)生變化Vue 對象的 data 屬性中的數(shù)據(jù)也會變化data 屬性中數(shù)據(jù)變化我們知道可以通過賦值來改變但是視圖數(shù)據(jù)為什么會發(fā)生變化呢只有表單項標(biāo)簽所以雙向綁定一定是使用在表單項標(biāo)簽上的。在上述代碼中添加以下代碼我們會發(fā)現(xiàn)輸入框中輸入內(nèi)容會改變上述代碼中超鏈接的地址這就是數(shù)據(jù)雙向綁定。input typetext v-modelurl那么這個在企業(yè)開發(fā)的應(yīng)用場景是什么雙向綁定的作用可以獲取表單的數(shù)據(jù)的值然后提交給服務(wù)器通過 v-bind 或者 v-model 綁定的變量必須在數(shù)據(jù)模型中聲明。v-on為 HTML 標(biāo)簽綁定事件類似 JS 中的事件綁定事件名相較于 JS 沒有 on有v-on:事件名或事件名兩種寫法如下// JS中 input onclickdemo() // Vue中還有簡寫形式 input v-on:clickdemo() input clickdemo()接下來演示一個點擊事件div idapp //兩種寫法都可以 input typebutton value點我一下 v-on:clickhandle() input typebutton value點我一下 clickhandle() /div script new Vue({ el: #app, //vue接管區(qū)域 data:{ }, methods: { //函數(shù)聲明 handle: function(){ alert(你點我了一下...); } } }) /scriptv-on 指令事件綁定的函數(shù)需要在 Vue 對象 methods 中聲明v-ifv-else-ifv-else根據(jù)條件渲染元素判定為 true 時渲染否則不渲染。定義 Vue 對象的代碼省略雙向綁定 age 屬性意味著我們可以通過表單輸入框來改變age的值下面演示代碼年齡input typetext v-modelage經(jīng)判定,為: span v-ifage 35年輕人(35及以下)/span span v-else-ifage 35 age 60中年人(35-60)/span span v-else老年人(60及以上)/span以上代碼實現(xiàn)了當(dāng)我們改變年齡時動態(tài)判斷年齡的值呈現(xiàn)對應(yīng)的年齡的文字描述。v-show根據(jù)條件展示元素判定為 true 時顯示否則不顯示。和上述 v-if 的顯示效果一樣區(qū)別在于上述判斷為 false 時不渲染而 v-show 無論怎樣都會渲染只是決定是否顯示。具體差別可以在 F12 開發(fā)者工具中查看v-if 指令中不滿足條件的標(biāo)簽代碼直接沒了而 v-show 指令中不滿足條件的代碼依然存在只是添加了 css 樣式 display:none 來控制標(biāo)簽不顯示。v-for從名字我們就能看出這個指令是用來遍歷的。需要循環(huán)哪個標(biāo)簽v-for 指令就寫在哪個標(biāo)簽上。其語法格式如下標(biāo)簽 v-for變量名 in 集合模型數(shù)據(jù) {{變量名}} /標(biāo)簽有時我們遍歷時需要使用索引那么 v-for 指令遍歷的語法格式如下標(biāo)簽 v-for(變量名,索引變量) in 集合模型數(shù)據(jù) //索引變量是從0開始所以要表示序號的話需要手動的加1 //在Vue初體驗中介紹了插值表達式可以進行算術(shù)運算 {{索引變量 1}} {{變量名}} /標(biāo)簽接下來演示一個示例div idapp div v-foraddr in addrs{{addr}}/div hr div v-for(addr,index) in addrs{{index 1}} : {{addr}}/div /div script new Vue({ el: #app, //vue接管區(qū)域 data:{ addrs:[北京, 上海, 西安, 成都, 深圳] } }) /script5.4 Vue 生命周期Vue 的生命周期指的是 Vue 對象從創(chuàng)建到銷毀的過程。Vue的生命周期包含 8 個階段每觸發(fā)一個生命周期事件會自動執(zhí)行一個生命周期方法這些生命周期方法也被稱為鉤子方法。其完整的生命周期如下圖所示狀態(tài)階段周期beforeCreate創(chuàng)建前created創(chuàng)建后beforeMount掛載前mounted掛載完成beforeUpdate更新前updated更新后beforeDestroy銷毀前destroyed銷毀后下圖是 Vue 官網(wǎng)提供的從創(chuàng)建 Vue 到銷毀 Vue 對象的整個過程及各個階段對應(yīng)的鉤子函數(shù)其中我們需要重點關(guān)注的是mounted其他的我們了解即可。mounted掛載完成Vue 初始化成功HTML 頁面渲染成功。以后我們一般用于頁面初始化自動的 ajax 請求后臺數(shù)據(jù)發(fā)送請求到服務(wù)端加載數(shù)據(jù)new Vue({ el: #app, //vue接管區(qū)域 data:{ }, methods: { }, //與 methods 同級 mounted () { alert(vue掛載完成,發(fā)送請求到服務(wù)端) } })5.5 Vue 路由前端路由URL 中的 hash(#號) 與組件之間的對應(yīng)關(guān)系。Vue Router 是 Vue 的官方路由。有以下組成部分VueRouter路由器類根據(jù)路由請求在路由視圖中動態(tài)渲染選中的組件router-link請求鏈接組件瀏覽器會解析成arouter-view動態(tài)視圖組件用來渲染展示與路由路徑對應(yīng)的組件首先 VueRouter 根據(jù)我們配置的 url 的 hash 片段和路由的組件關(guān)系去維護一張路由表然后頁面提供一個router-link組件用戶點擊發(fā)出路由請求接著 VueRouter 根據(jù)路由請求在路由表中找到對應(yīng)的 vue 組件最后 VueRouter 會切換router-view中的組件從而進行視圖的更新。如下圖所示使用 VueRouter 需要先安裝 vue-router 插件可以通過如下命令npm install vue-router3.5.1或者在使用 vue-cli 創(chuàng)建項目時選擇 VueRouter 插件。使用大致有這樣幾步在 src/router/index.js 文件中定義路由表根據(jù)其提供的模板代碼進行修改。如下{ path: /emp, name: emp, component: () import(../views/tlias/EmpView.vue) }, { path: /, //默認路徑 redirect:/emp //可以重定向到/emp防止默認路徑?jīng)]有頁面顯示 },在 main.js 中引入了router功能。路由基本信息配置好了路由表已經(jīng)被加載此時我們還缺少2個東西就是router-link和router-view在需要跳轉(zhuǎn)的位置添加如下代碼//瀏覽器會解析成 a 標(biāo)簽 router-link to/dept部門管理/router-link在內(nèi)容展示區(qū)域即 App.vue 中定義route-view實現(xiàn)組件的切換如下template div idapp router-view/router-view /div /template6. Ajax6.1 原生 Ajax前端頁面中的數(shù)據(jù)不應(yīng)該是在頁面中寫死的而應(yīng)該來自于后端后端和前端是互不影響的程序前端應(yīng)該如何從后端獲取數(shù)據(jù)這必須涉及到 2 個程序的交互這就需要用到我們接下來學(xué)習(xí)的 Ajax 技術(shù)。Ajax全稱AsynchronousJavaScriptAndXML異步的 JavaScrip t和 XML。其作用如下數(shù)據(jù)交換通過 Ajax 可以向服務(wù)器發(fā)送請求并獲取服務(wù)器響應(yīng)的數(shù)據(jù)。異步交互可以在不重新加載整個頁面的情況下與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的技術(shù)如搜索聯(lián)想、用戶名是否可用的校驗等等。針對上述 Ajax 的局部刷新功能是因為 Ajax 請求是異步的與之對應(yīng)的有同步請求。接下來我們介紹一下異步請求和同步請求的區(qū)別。同步瀏覽器頁面發(fā)送請求給服務(wù)器在服務(wù)器處理請求的過程中瀏覽器頁面不能做其他的操作只能等待服務(wù)器響應(yīng)結(jié)束才能繼續(xù)做其他的操作。異步瀏覽器頁面發(fā)送請求給服務(wù)器在服務(wù)器處理請求的過程中瀏覽器頁面還可以做其他的操作。Ajax 請求是基于客戶端發(fā)送請求服務(wù)器響應(yīng)數(shù)據(jù)的技術(shù)。服務(wù)器端這里我使用 SpringBoot直接通過 Ajax 請求訪問該地址即可。后臺服務(wù)器地址http://localhost:8080/nav/selectAll有一點要注意CORS是瀏覽器的一種安全機制用來防止網(wǎng)頁請求來自不同域的資源。如果服務(wù)器沒有正確配置CORS頭瀏覽器會拒絕訪問響應(yīng)數(shù)據(jù)。如果只是為了開發(fā)和測試可以使用瀏覽器擴展來繞過CORS政策。這些擴展允許所有請求通過但是請注意這種方法不適用于生產(chǎn)環(huán)境。Allow CORS客戶端第一步創(chuàng)建XMLHttpRequest對象用于和服務(wù)器交換數(shù)據(jù)。也是原生 Ajax 請求的核心對象提供了各種方法。代碼如下//1. 創(chuàng)建XMLHttpRequest var xmlHttpRequest new XMLHttpRequest();第二步調(diào)用open()方法設(shè)置請求的參數(shù)信息例如請求地址請求方式然后調(diào)用send()方法向服務(wù)器發(fā)送請求。代碼如下//2. 發(fā)送請求 xmlHttpRequest.open(GET,http://localhost:8080/nav/selectAll); xmlHttpRequest.send();第三步獲取服務(wù)器響應(yīng)數(shù)據(jù)//3. 獲取服務(wù)響應(yīng)數(shù)據(jù) xmlHttpRequest.onreadystatechange function(){ //此處判斷 4表示瀏覽器已經(jīng)完全接受到Ajax請求得到的響應(yīng)200表示這是一個正確的Http請求沒有錯誤 if(xmlHttpRequest.readyState 4 xmlHttpRequest.status 200){ document.getElementById(div1).innerHTML xmlHttpRequest.responseText; } }6.2 Axios上述原生的 Ajax 請求的代碼編寫起來還是比較繁瑣的所以接下來我們學(xué)習(xí)一門更加簡單的發(fā)送 Ajax 請求的技術(shù) Axios 。Axios 對原生的 Ajax 進行了封裝簡化書寫快速開發(fā)。Axios 官網(wǎng)是Axios中文文檔Axios 的使用非常簡單主要有兩步引入 Axios 的 js 文件script srcjs/axios-0.18.0.js/script使用 Axios 發(fā)送請求并獲取響應(yīng)結(jié)果官方提供的 api 很多此處給出2種如下發(fā)送 get 請求axios({ method:get, url:http://localhost:8080/nav/add?nav_titlehhhnav_link666 }).then(function (result){ alert(result.data); })發(fā)送 post 請求axios({ method:post, url: http://localhost:8080/nav/add, data: nav_titlehhhnav_link666 }).then((result) { //可用箭頭函數(shù)簡寫 alert(result.data); });axios() 是用來發(fā)送異步請求的小括號中使用 JSON 對象傳遞請求相關(guān)的參數(shù)method屬性用來設(shè)置請求方式的。取值為 get 或者 post。url屬性用來書寫請求的資源路徑。如果是 get 請求需要將請求參數(shù)拼接到路徑的后面格式為 url?參數(shù)名參數(shù)值參數(shù)名2參數(shù)值2。data屬性作為請求體被發(fā)送的數(shù)據(jù)。也就是說如果是 post 請求的話數(shù)據(jù)需要作為 data 屬性的值。then()需要傳遞一個匿名函數(shù)。我們將then()中傳遞的匿名函數(shù)稱為回調(diào)函數(shù)意思是該匿名函數(shù)在發(fā)送請求時不會被調(diào)用而是在成功響應(yīng)后調(diào)用的函數(shù)。而該回調(diào)函數(shù)中的result參數(shù)是對響應(yīng)的數(shù)據(jù)進行封裝的對象通過result.data可以獲取到響應(yīng)的數(shù)據(jù)。Axios 還針對不同的請求提供了別名方式的 api它們更簡單易用具體如下方法描述axios.get(url [, config])發(fā)送get請求axios.post(url [, data[, config]])發(fā)送post請求axios.put(url [, data[, config]])發(fā)送put請求axios.delete(url [, config])發(fā)送delete請求[] 中的內(nèi)容表示可選項我們目前只關(guān)注 get 和 post 請求所以在上述案例中我們可以將代碼改寫成如下axios.get(http://localhost:8080/nav/selectAll).then(result { console.log(result); // 箭頭函數(shù)的()甚至也可以省略 }) axios.post(http://localhost:8080/nav/add,nav_titlehhhnav_link666).then(result { console.log(result.data); })7. 前后端分離開發(fā)7.1 開發(fā)方式簡介前面我們介紹過有兩種開發(fā)方式前后端混合開發(fā)和前后端分離開發(fā)。前后端混合開發(fā)顧名思義就是前后端代碼混在一起開發(fā)。這種開發(fā)模式有如下缺點溝通成本高后端人員發(fā)現(xiàn)前端有問題需要找前端人員修改前端修改成功再交給后臺人員使用。分工不明確后端開發(fā)人員需要開發(fā)后端代碼也需要開發(fā)部分前端代碼。不便管理所有的代碼都在一個工程中。不便維護和擴展前端代碼更新和后端無關(guān)但是需要整個工程包括后臺一起重新打包部署。所以我們目前基本都是采用的前后端分離開發(fā)方式如下圖所示我們將原先的工程分為前端工程和后端工程這兩個工程前端工程交給專業(yè)的前端人員開發(fā)后端工程交給專業(yè)的后端人員開發(fā)。前端頁面需要數(shù)據(jù)可以通過發(fā)送異步請求從后端工程獲取。但是我們前后端是分開開發(fā)的前端人員怎么知道后端返回數(shù)據(jù)的格式呢后端人員開發(fā)怎么知道前端人員需要的數(shù)據(jù)格式呢針對這個問題我們?yōu)榍昂蠖碎_發(fā)統(tǒng)一指定一套規(guī)范我們前后端開發(fā)人員只需遵循這套規(guī)范開發(fā)就可以無縫銜接這就是我們的接口文檔接口文檔有離線版和在線版本。那么接口文檔的內(nèi)容怎么來的呢是我們后端開發(fā)者根據(jù)產(chǎn)品經(jīng)理提供的產(chǎn)品原型和需求文檔所撰寫出來的。那么基于前后臺分離開發(fā)的模式下后端開發(fā)者開發(fā)一個功能的具體流程如何呢需求分析首先我們需要閱讀需求文檔分析需求理解需求。接口定義查詢接口文檔中關(guān)于需求的接口的定義包括地址參數(shù)響應(yīng)數(shù)據(jù)類型等等。前后臺并行開發(fā)各自按照接口文檔進行開發(fā)實現(xiàn)需求。測試前后端開發(fā)完了各自按照接口文檔進行測試。前后端聯(lián)調(diào)測試前端工程請求后端工程測試功能。7.2 YApi前后端分離開發(fā)中我們前后端開發(fā)人員都需要遵循接口文檔所以接下來我們介紹一款撰寫接口文檔的平臺。YApi 是高效、易用、功能強大的 api 管理平臺旨在為開發(fā)、產(chǎn)品、測試人員提供更優(yōu)雅的接口管理服務(wù)。官網(wǎng)地址YApi Pro-高效、易用、功能強大的可視化接口管理平臺YApi 主要提供了2個功能API 接口管理根據(jù)需求撰寫接口包括接口的地址參數(shù)響應(yīng)等等信息。Mock 服務(wù)模擬真實接口生成接口的模擬測試數(shù)據(jù)用于前端的測試。7.3 前端工程化前端工程化是通過 Vue 官方提供的腳手架 Vue-cli 來完成的用于快速的生成一個 Vue 的項目模板。 Vue-cli 主要提供了如下功能統(tǒng)一的目錄結(jié)構(gòu)本地調(diào)試熱部署單元測試集成打包上線運行 Vue-cli需要依賴 NodeJSNodeJS 是前端工程化依賴的環(huán)境。所以我們需要先安裝 NodeJS然后才能安裝 Vue-cli。Node.js — 下載 Node.js?npm install -g vue/cli環(huán)境準(zhǔn)備好了接下來我們通過 Vue-cli 創(chuàng)建一個 Vue 項目再學(xué)習(xí)一下 Vue 項目的目錄結(jié)構(gòu)。Vue-cli 提供了如下2種方式創(chuàng)建 Vue 項目:命令行直接通過命令行方式創(chuàng)建 Vue 項目vue create vue-project01圖形化界面通過命令先進入到圖形化界面然后再進行 Vue 工程的創(chuàng)建vue ui基于 Vue 腳手架創(chuàng)建出來的工程有標(biāo)準(zhǔn)的目錄結(jié)構(gòu)如下創(chuàng)建好工程如何運行呢有兩種方式可供選擇首先可以通過 VSCode 的圖形化界面 npm 腳本啟動如下圖還可以直接基于 cmd 命令窗口在 Vue 目錄下執(zhí)行輸入命令npm run serve即可。對于8080端口經(jīng)常被占用所以我們可以去修改默認的8080端口。我們修改vue.config.js文件的內(nèi)容添加如下代碼devServer:{ port:7000 }我們發(fā)現(xiàn)index.html 的代碼很簡潔但是瀏覽器所呈現(xiàn)的 index.html 內(nèi)容卻很豐富代碼和內(nèi)容不匹配所以 Vue 是如何做到的呢接下來我們學(xué)習(xí)一下 Vue 項目的開發(fā)流程。對于 Vue 項目index.html 文件默認是引入了入口函數(shù) main.js 文件我們找到 src/main.js 文件其代碼如下import Vue from vue import App from ./App.vue import router from ./router Vue.config.productionTip false new Vue({ router, render: h h(App) }).$mount(#app)?上述代碼中包括如下幾個關(guān)鍵點import導(dǎo)入指定文件并且重新命名。例如上述代碼import App from ./App.vue導(dǎo)入當(dāng)前目錄下的 App.vue 并且命名為 App。new Vue()創(chuàng)建 Vue 對象。$mount(#app)將 Vue 對象創(chuàng)建的 dom 對象掛在到 id“app” 的這個標(biāo)簽區(qū)域中作用和之前學(xué)習(xí)的 Vue 對象的 el 屬性一致。router引入路由。render主要使用視圖的渲染的。此時我們知道了 Vue 創(chuàng)建的 dom 對象掛在到 idapp 的標(biāo)簽區(qū)域但是我們還是沒有解決最開始的問題首頁內(nèi)容如何呈現(xiàn)的render 中的 App 是關(guān)鍵頭文件上顯示導(dǎo)入來自 ./App.vue 的 App。這個 App 對象怎么回事呢我們打開 App.vue注意 .vue 結(jié)尾的都是 vue 組件。而 vue 的組件文件包含3個部分template模板部分主要是 HTML 代碼用來展示頁面主體結(jié)構(gòu)的。scriptjs代碼區(qū)域主要是通過 js 代碼來控制模板的數(shù)據(jù)來源和行為的。stylecss樣式部分主要通過 css 樣式控制模板的頁面效果得。!-- 模板部分由它生成HTML代碼 -- template div {{message}} /div /template !-- 控制模板的數(shù)據(jù)來源和行為 -- script export default { //data之前直接指定對象這里的data指定的是函數(shù)函數(shù)返回對象 data: function() { return { message:hello vue } } //4.5.1.3中介紹過函數(shù)可以這樣簡寫 data(){ return { message:hello vue } } } /script !-- css樣式部分 -- style /style8. Element在 MVVM 開發(fā)模式下前面介紹的 Vue 是側(cè)重于 VM 開發(fā)的主要用于數(shù)據(jù)綁定到視圖的接下來介紹的 ElementUI 就是一款側(cè)重于 V 開發(fā)的前端框架主要用于開發(fā)美觀的頁面的。Element是餓了么公司前端開發(fā)團隊提供的一套基于 Vue 的網(wǎng)站組件庫用于快速構(gòu)建網(wǎng)頁。Element 提供了很多組件組成網(wǎng)頁的部件供我們使用。例如超鏈接、按鈕、圖片、表格等等。ElementUI 的學(xué)習(xí)方式和之前不太一樣對于 ElementUI作為一個后端開發(fā)者只需要學(xué)會如何從ElementUI的官網(wǎng)復(fù)制組件到我們自己的頁面中并且做一些修改即可。其官網(wǎng)地址Element - 網(wǎng)站快速成型工具。首先要安裝 ElementUI 的組件庫打開VS Code在命令行輸入如下命令npm install element-ui2.9.2然后需要在 main.js 這個入口 js 文件中引入 ElementUI 的組件庫其代碼如下import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; Vue.use(ElementUI);按照 vue 項目的開發(fā)規(guī)范在 src/views 目錄下創(chuàng)建 vue 組件文件注意組件名稱后綴是.vue并且使用駝峰命名并且在組件文件中編寫之前介紹過的基本組件語法。最后我們只需要去ElementUI的官網(wǎng)在組件庫中找到對應(yīng)的組件復(fù)制代碼即可需要注意的是我們組件包括了3個部分如果官方有除了 template 部分之外的 style 和 script 都需要復(fù)制。還需要在默認訪問的根組件 src/App.vue 中引入我們自定義的組件具體代碼如下template div //保留這個div標(biāo)簽 !-- 這里根據(jù)提示引入element-view組件時會自動生成必須使用駝峰命名 -- !-- vue組件叫什么 xxxView.vue 這里就叫 xxx-view -- element-view/element-view /div /template script !-- 這里根據(jù)提示引入element-view組件時會自動生成 -- import ElementView from ./views/Element/ElementView.vue export default { components: { ElementView }, } /script9. 打包部署打包部署分為兩步第一步是打包第二步是部署。直接在 VScode 中點擊 build 就可以完成打包打包完成生成一個 dist 目錄。部署可以使用 Nginx。Nginx 是一款輕量級的 Web 服務(wù)器/反向代理服務(wù)器及電子郵件IMAP/POP3代理服務(wù)器。其特點是占有內(nèi)存少并發(fā)能力強在各大型互聯(lián)網(wǎng)公司都有非常廣泛的使用。Nginx 的功能十分強大這里只是使用其中非常小的一部分功能。Nginx 在 windows 中的安裝非常方便直接解壓即可。官網(wǎng)nginx: download下載穩(wěn)定版。下圖是 Nginx 的目錄結(jié)構(gòu)說明將之前打包的前端工程 dist 目錄下的內(nèi)容拷貝到 nginx 的 html 目錄下雙擊 nginx.exe 來啟動 nginx點擊之后沒有任何反應(yīng)可以通過任務(wù)管理器的詳細信息查看是否啟動成功通過名稱找到 nginx 則表示已經(jīng)啟動。nginx 默認占用端口80如果80端口被占用可以在 cmd 通過netstat -ano | findStr 80查看哪個進程占用了80端口返回的信息中有進程的 PID 號再去任務(wù)管理器中通過 PID 找到占用端口的進程。在 windows 下80端口經(jīng)常被系統(tǒng)占用如果80端口被占用我們可以通過 conf/nginx.conf 配置文件來修改端口號。啟動成功后訪問在瀏覽器訪問 http://localhost:80 即可其中80端口可以省略。2025開年AI技術(shù)打得火熱正在改變前端人的職業(yè)命運阿里云核心業(yè)務(wù)全部接入Agent體系字節(jié)跳動30%前端崗位要求大模型開發(fā)能力騰訊、京東、百度開放招聘技術(shù)崗80%與AI相關(guān)……大模型正在重構(gòu)技術(shù)開發(fā)范式傳統(tǒng)CRUD開發(fā)模式正在被AI原生應(yīng)用取代最殘忍的是業(yè)務(wù)面臨轉(zhuǎn)型領(lǐng)導(dǎo)要求用RAG優(yōu)化知識庫檢索你不會帶AI團隊微調(diào)大模型要準(zhǔn)備多少數(shù)據(jù)你不懂想轉(zhuǎn)型大模型應(yīng)用開發(fā)工程師等相關(guān)崗沒項目實操經(jīng)驗……這不是技術(shù)焦慮而是職業(yè)生存危機曾經(jīng)React、Vue等熱門的開發(fā)框架已不再是就業(yè)的金鑰匙。如果認為會調(diào)用API就是懂大模型、能進行二次開發(fā)那就大錯特錯了。制造、醫(yī)療、金融等各行業(yè)都在加速AI應(yīng)用落地未來企業(yè)更看重能用AI大模型技術(shù)重構(gòu)業(yè)務(wù)流的技術(shù)人。如今技術(shù)圈降薪裁員頻頻爆發(fā)傳統(tǒng)崗位大批縮水相反AI相關(guān)技術(shù)崗瘋狂擴招薪資逆勢上漲150%大廠老板們甚至開出70-100W年薪挖掘AI大模型人才不出1年 “有AI項目開發(fā)經(jīng)驗”或?qū)⒊蔀榍岸巳送哆f簡歷的門檻。風(fēng)口之下與其像“溫水煮青蛙”一樣坐等被行業(yè)淘汰不如先人一步掌握AI大模型原理應(yīng)用技術(shù)項目實操經(jīng)驗“順風(fēng)”翻盤大模型目前在人工智能領(lǐng)域可以說正處于一種“炙手可熱”的狀態(tài)吸引了很多人的關(guān)注和興趣也有很多新人小白想要學(xué)習(xí)入門大模型那么如何入門大模型呢下面給大家分享一份2025最新版的大模型學(xué)習(xí)路線幫助新人小白更系統(tǒng)、更快速的學(xué)習(xí)大模型2025最新版CSDN大禮包《AGI大模型學(xué)習(xí)資源包》免費分享**一、2025最新大模型學(xué)習(xí)路線一個明確的學(xué)習(xí)路線可以幫助新人了解從哪里開始按照什么順序?qū)W習(xí)以及需要掌握哪些知識點。大模型領(lǐng)域涉及的知識點非常廣泛沒有明確的學(xué)習(xí)路線可能會導(dǎo)致新人感到迷茫不知道應(yīng)該專注于哪些內(nèi)容。我們把學(xué)習(xí)路線分成L1到L4四個階段一步步帶你從入門到進階從理論到實戰(zhàn)。L1級別:AI大模型時代的華麗登場L1階段我們會去了解大模型的基礎(chǔ)知識以及大模型在各個行業(yè)的應(yīng)用和分析學(xué)習(xí)理解大模型的核心原理關(guān)鍵技術(shù)以及大模型應(yīng)用場景通過理論原理結(jié)合多個項目實戰(zhàn)從提示工程基礎(chǔ)到提示工程進階掌握Prompt提示工程。L2級別AI大模型RAG應(yīng)用開發(fā)工程L2階段是我們的AI大模型RAG應(yīng)用開發(fā)工程我們會去學(xué)習(xí)RAG檢索增強生成包括Naive RAG、Advanced-RAG以及RAG性能評估還有GraphRAG在內(nèi)的多個RAG熱門項目的分析。L3級別大模型Agent應(yīng)用架構(gòu)進階實踐L3階段大模型Agent應(yīng)用架構(gòu)進階實現(xiàn)我們會去學(xué)習(xí)LangChain、 LIamaIndex框架也會學(xué)習(xí)到AutoGPT、 MetaGPT等多Agent系統(tǒng)打造我們自己的Agent智能體同時還可以學(xué)習(xí)到包括Coze、Dify在內(nèi)的可視化工具的使用。L4級別大模型微調(diào)與私有化部署L4階段大模型的微調(diào)和私有化部署我們會更加深入的探討Transformer架構(gòu)學(xué)習(xí)大模型的微調(diào)技術(shù)利用DeepSpeed、Lamam Factory等工具快速進行模型微調(diào)并通過Ollama、vLLM等推理部署框架實現(xiàn)模型的快速部署。整個大模型學(xué)習(xí)路線L1主要是對大模型的理論基礎(chǔ)、生態(tài)以及提示詞他的一個學(xué)習(xí)掌握而L3 L4更多的是通過項目實戰(zhàn)來掌握大模型的應(yīng)用開發(fā)針對以上大模型的學(xué)習(xí)路線我們也整理了對應(yīng)的學(xué)習(xí)視頻教程和配套的學(xué)習(xí)資料。二、大模型經(jīng)典PDF書籍書籍和學(xué)習(xí)文檔資料是學(xué)習(xí)大模型過程中必不可少的我們精選了一系列深入探討大模型技術(shù)的書籍和學(xué)習(xí)文檔它們由領(lǐng)域內(nèi)的頂尖專家撰寫內(nèi)容全面、深入、詳盡為你學(xué)習(xí)大模型提供堅實的理論基礎(chǔ)。書籍含電子版PDF三、大模型視頻教程對于很多自學(xué)或者沒有基礎(chǔ)的同學(xué)來說書籍這些純文字類的學(xué)習(xí)教材會覺得比較晦澀難以理解因此我們提供了豐富的大模型視頻教程以動態(tài)、形象的方式展示技術(shù)概念幫助你更快、更輕松地掌握核心知識。四、大模型項目實戰(zhàn)學(xué)以致用當(dāng)你的理論知識積累到一定程度就需要通過項目實戰(zhàn)在實際操作中檢驗和鞏固你所學(xué)到的知識同時為你找工作和職業(yè)發(fā)展打下堅實的基礎(chǔ)。五、大模型面試題面試不僅是技術(shù)的較量更需要充分的準(zhǔn)備。在你已經(jīng)掌握了大模型技術(shù)之后就需要開始準(zhǔn)備面試我們將提供精心整理的大模型面試題庫涵蓋當(dāng)前面試中可能遇到的各種技術(shù)問題讓你在面試中游刃有余。因篇幅有限僅展示部分資料需要點擊下方鏈接即可前往獲取2025最新版CSDN大禮包《AGI大模型學(xué)習(xí)資源包》免費分享