Vue入門-Webpack入門-CMS頁面查詢開發(fā)

1. vue.js研究

1.1 vue.js介紹

  1. vue.js是什么?

Vue (讀音 /vju?/樊销,類似于 view) 是一套用于構建用戶界面的漸進式框架钦奋。與其它大型框架不同的是财边,Vue 被設計為可以自底向上逐層應用着撩。Vue 的核心庫只關注視圖層崇猫,不僅易于上手沈条,還便于與第三方庫或既有項目整合。另一方面诅炉,當與現(xiàn)代化的工具鏈以及各種支持類庫結合使用時蜡歹,Vue 也完全能夠為復雜的單頁應用提供驅動。

漸進式框架:Progressive涕烧,說明vue.js的輕量月而,是指一個前端項目可以使用vue.js一兩個特性也可以整個項目都用

vue.js。

自底向上逐層應用:作為漸進式框架要實現(xiàn)的目標就是方便項目增量開發(fā)议纯。參考:https://cn.vuejs.org/v2/guide/

1.2 Vue.js的使用

  1. 在html頁面使用script引入vue.js的庫即可使用父款。

  2. 使用Npm管理依賴,使用webpack打包工具對vue.js應用打包痹扇。大型應用推薦此方案铛漓。

  3. Vue-CLI腳手架

    使用vue.js官方提供的CLI腳本架很方便去創(chuàng)建vue.js工程雛形。

1.3 vue.js有哪些功能?

  1. 聲明式渲染

    Vue.js 的核心是一個允許采用簡潔的模板語法來聲明式地將數(shù)據(jù)渲染進 DOM 的系統(tǒng)鲫构。比如:使用vue.js的插值表達式放在Dom的任意地方浓恶, 差值表達式的值將被渲染在Dom中。

  2. 條件與循環(huán)

    dom中可以使用vue.js提供的v-if结笨、v-for等標簽包晰,方便對數(shù)據(jù)進行判斷湿镀、循環(huán)。

  3. 雙向數(shù)據(jù)綁定

    Vue 提供v-model 指令伐憾,它可以輕松實現(xiàn)Dom元素和數(shù)據(jù)對象之間雙向綁定勉痴,即修改Dom元素中的值自動修改綁定的數(shù)據(jù)對象,修改數(shù)據(jù)對象的值自動修改Dom元素中的值树肃。

  4. 處理用戶輸入

    為了讓用戶和你的應用進行交互蒸矛,我們可以用v-on指令添加一個時間監(jiān)聽器,通過它調用在 Vue 實例中定義的方法

  5. 組件化應用構建

    vue.js可以定義一個一個的組件胸嘴,在vue頁面中引用組件雏掠,這個功能非常適合構建大型應用。

2. Vue.js基礎

2.1 MVVM模式

vue.js是一個MVVM的框架劣像,理解MVVM有利于學習vue.js乡话。

  • MVVM拆分解釋為:
    • Model:負責數(shù)據(jù)存儲
    • View:負責頁面展示
    • View Model:負責業(yè)務邏輯處理(比如Ajax請求等),對數(shù)據(jù)進行加工后交給視圖展示
  • MVVM要解決的問題是將業(yè)務邏輯代碼與視圖代碼進行完全分離耳奕,使各自的職責更加清晰绑青,后期代碼維護更加簡單
  • 用圖解的形式分析Ajax請求回來數(shù)據(jù)后直接操作Dom來達到視圖的更新的缺點,以及使用MVVM模式是如何來解決這個缺點的
  • Vue中的 MVVM

從上圖看出屋群,VM(ViewModel)可以把view視圖和Model模型解耦合闸婴,VM的要做的工作就是vue.js所承擔的。

2.2 入門程序

本次測試我們在門戶目錄中創(chuàng)建一個html頁面進行測試谓晌,正式的頁面管理前端程序會單獨創(chuàng)建工程掠拳。在門戶目錄中創(chuàng)建vuetest目錄癞揉,并且在目錄下創(chuàng)建vue_01.html文件

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF‐8">
        <title>vue.js入門程序</title>
        <script src="/js/vue/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            {{name}}
            <!‐‐ 在Vue接管區(qū)域中使用Vue的系統(tǒng)指令呈現(xiàn)數(shù)據(jù)這些指令就相當于是MVVM中的View這個角色 ‐‐>
        </div>
    </body>
    <script>
        // 實例化Vue對象
        //vm :叫做MVVM中的 View Model
        var VM = new Vue({
            el:"#app",//表示當前vue對象接管app的div區(qū)域
            data:{
                name:'傳智播客'// 相當于是MVVM中的Model這個角色
            }
        });
    </script>
</html>

代碼編寫步驟:

  1. 定義html纸肉,引入vue.js
  2. 定義app div,此區(qū)域作為vue的接管區(qū)域
  3. 定義vue實例喊熟,接管app區(qū)域柏肪。
  4. 定義model(數(shù)據(jù)對象)
  5. VM完成在app中展示數(shù)據(jù)

2.3 1+1=2

實現(xiàn)效果:

代碼如下:

<!DOCTYPE html>
<html lang="en" xmlns:v‐on="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF‐8">
        <title>vue.js入門程序</title>

    </head>
    <body>
        <div id="app">
            <!‐‐{{name}}解決閃爍問題使用v‐text‐‐>
            <a v‐bind:href="url"><span v‐text="name"></span></a>
            <input type="text" v‐model="num1">+
            <input type="text" v‐model="num2">=
            <span v‐text="result"></span>
            <!‐‐ <span v‐text="Number.parseInt(num1)+Number.parseInt(num2)"></span>‐‐>
            <!‐‐{{num1+num2}}‐‐>
            <!‐‐<input type="text" v‐model="result">‐‐>
            <button v‐on:click="change">計算</button>
            <!‐‐ 在Vue接管區(qū)域中使用Vue的系統(tǒng)指令呈現(xiàn)數(shù)據(jù)這些指令就相當于是MVVM中的View這個角色 ‐‐>
        </div>
    </body>
    <script src="/js/vue/vue.min.js"></script>
    <script>
        // 實例化Vue對象

        //vm :叫做MVVM中的 View Model
        var VM = new Vue({
            el:"#app",//表示當前vue對象接管app的div區(qū)域data:{
            name:'黑馬程序員',// 相當于是MVVM中的Model這個角色
            num1:0, num2:0, result:0,
            url:'http://www.itcast.cn'
        },
                         methods:{
                         change:function(){
            this.result = Number.parseInt(this.num1)+Number.parseInt(this.num2) alert(this.result)
        }
        }

        });
    </script>
</html>
  1. v-model

    在表單控件或者組件上創(chuàng)建雙向綁定

    v-model僅能在如下元素中使用:

    input 
    select 
    textarea
    components(Vue中的組件)
    
  2. 解決插值表達式閃爍問題,使用v-text

    v-text可以將一個變量的值渲染到指定的元素中,它可以解決插值表達式閃爍的問題

  3. v-on綁定一個按鈕的單擊事件

  4. v-bind

    1芥牌、作用:
    v‐bind可以將數(shù)據(jù)對象綁定在dom的任意屬性中烦味。
    v‐bind可以給dom對象綁定一個或多個特性,例如動態(tài)綁定style和class
    
    2壁拉、舉例:
    <img v‐bind:src="imageSrc">
    <div v‐bind:style="{ fontSize: size + 'px' }"></div>
    
    3谬俄、縮寫形式
    <img :src="imageSrc">
    <div :style="{ fontSize: size + 'px' }"></div>
    

2.4 v-if和v-for

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF‐8">
        <title>Document</title>
        <script src="/js/vue/vue.min.js"></script>
    </head>
    <body>
        <div id="app">
            <ul>
                <!‐‐只顯示偶數(shù)行‐‐>
                <li v‐for="(item,index) in list" :key="index" v‐if="index % 2==0">{{index}}‐{{item}}
                </li>
                <li v‐for ="(value,key) in user">{{key}}‐{{value}}</li>
                <li v‐for="(item,index) in userlist" :key="item.user.uname">
                    <div v‐if="item.user.uname=='heima'" style="background: chartreuse"><!‐‐名稱為heima的加背景色‐‐>
                        {{index}}‐{{item.user.uname}}‐{{item.user.age}}
                    </div>
                    <div v‐else="">
                        {{index}}‐{{item.user.uname}}‐{{item.user.age}}
                    </div>

                </li>
            </ul>
        </div>
    </body>

    <script>
        new Vue({
            el:'#app', data:{
                list:[1,2,3,4,4],
                user:{uname:'itcast',age:10}, userlist:[
                    { user:{uname:'itcast',age:10}},
                    { user:{uname:'heima',age:11}}
                ]
            }
        });
    </script>
</html>

3. webpack入門

使用vue.js開發(fā)大型應用需要使用webpack打包工具,本節(jié)研究webpack的使用方法弃理。

3.1 webpack介紹

Webpack 是一個前端資源的打包工具溃论,它可以將js、image痘昌、css等資源當成一個模塊進行打包钥勋。

從圖中我們可以看出炬转,Webpack 可以將js、css算灸、png等多種靜態(tài)資源 進行打包扼劈,使用webpack有什么好處呢?

  1. 模塊化開發(fā)

    程序員在開發(fā)時可以分模塊創(chuàng)建不同的js菲驴、 css等小文件方便開發(fā)荐吵,最后使用webpack將這些小文件打包成一個文件,減少了http的請求次數(shù)赊瞬。

    webpack可以實現(xiàn)按需打包捍靠,為了避免出現(xiàn)打包文件過大可以打包成多個文件。

  2. 編譯typescript森逮、ES6等高級js語法

    隨著前端技術的強大榨婆,開發(fā)中可以使用javascript的很多高級版本,比如:typescript褒侧、ES6等良风,方便開發(fā),

    webpack可以將打包文件轉換成瀏覽器可識別的js語法闷供。

  3. CSS預編譯

    webpack允許在開發(fā)中使用Sass 和 Less等原生CSS的擴展技術烟央,通過sass-loader、less-loader將Sass 和 Less的語法編譯成瀏覽器可識別的css語法歪脏。

webpack的缺點:

  1. 配置有些繁瑣
  2. 文檔不豐富

3.2 安裝webpack

  1. 安裝Node.js

    webpack基于node.js運行疑俭,首先需要安裝node.js广料。

    下載對應你系統(tǒng)的Node.js版本: https://nodejs.org/en/download/

    測試:

    node -v
    
  2. 安裝NPM

    1. 自動安裝NPM

    npm全稱Node Package Manager寞冯,他是node包管理和分發(fā)的工具,使用NPM可以對應用的依賴進行管理窍箍,NPM

    的功能和服務端項目構建工具maven差不多豪硅,我們通過npm 可以很方便地下載js庫哩照,打包js文件。

    node.js已經(jīng)集成了npm工具懒浮,在命令提示符輸入 npm -v 可查看當前npm版本

  1. 設置包路徑

    包路徑就是npm從遠程下載的js包所存放的路徑飘弧。

    使用 npm con?g ls 查詢NPM管理包路徑(NPM下載的依賴包所存放的路徑)

  NPM默認的管理包路徑在C:/用戶/[用戶名]/AppData/Roming/npm/node_meodules,為了方便對依賴包管理砚著,我    們將管理包的路徑設置在單獨的地方次伶,本教程將安裝目錄設置在node.js的目錄下,**創(chuàng)建npm_modules和npm_cache**稽穆,執(zhí)行下邊的命令:

  本教程安裝node.js在D:\Software\node-v10.16.0\node下所以執(zhí)行命令如下:

  ```
  npm con?g set pre?x "D:\Software\node-v10.16.0\node\npm_modules" 
  npm con?g set cache "D:\Software\node-v10.16.0\node\npm_cache"
  ```
  1. 安裝cnpm
  npm默認會去國外的鏡像去下載js包冠王,在開發(fā)中通常我們使用國內鏡像,這里我們使用淘寶鏡像下邊我們來安裝cnpm:

  有時我們使用npm下載資源會很慢秧骑,所以我們可以安裝一個cnmp(淘寶鏡像)來加快下載速度版确。

  輸入命令扣囊,進行全局安裝淘寶鏡像。

  ```
  npm install -g cnpm --registry=https://registry.npm.taobao.org
  ```

  安裝后绒疗,我們可以使用以下命令來查看cnpm的版本

  ```
  cnpm -v
  ```

  `nrm ls` 查看鏡像已經(jīng)指向taobao

  使`nrm use XXX`切換 鏡像

  如果nrm沒有安裝則需要進行全局安裝:`cnpm install -g nrm`
  1. 安裝webpack

    連網(wǎng)安裝

    本地安裝:將webpack安裝到指定應用程序的目錄下侵歇。

    進入這個目錄,執(zhí)行

    npm install --save-dev webpack 或 cnpm install --save-dev webpack
    

    全局安裝:將webpack安裝npm默認的依賴包的目錄(前邊配置在了nodejs的安裝目錄下)在任意目錄吓蘑,執(zhí)行

    npm install -g webpack 或 cnpm install -g webpack
    

    建議指定webpack的版本進行安裝

    全局安裝:

    npm install webpack@3.6.0 -g或 cnpm install webpack@3.6.0 -g
    

    本地安裝

    npm install --save-dev webpack@3.6.0 或 cnpm install --save-dev webpack@3.6.0
    

3.3 入門程序

  1. 通過入門程序實現(xiàn)對js文件的打包惕虑,體會webpack是如何對應用進行模塊化管理。 對上邊1+1=2的例子使用webpack進行模塊化管理

  1. 定義模塊:創(chuàng)建webpacktest01目錄磨镶,將vue.min.js及vue_02.html拷貝到目錄下溃蔫。

    1. 定義model01.js

      在webpacktest01目錄下創(chuàng)建model01.js

      將本程序使用的加法運算的js方法抽取到一個js文件,此文件就是一個模塊

      // 定義add函數(shù)
      function add(x, y) { 
          return x + y
      }
      // function add2(x, y) {
      //    return x + y+1
      // }
      // 導出add方法
      module.exports.add = add;
      // module.exports ={add,add2};//如果有多個方法這樣導出
      // module.exports.add2 = add2//如果有多個方法也可以這樣導出
      
    2. 定義main.js

      在webpacktest01目錄下創(chuàng)建main.js琳猫,main.js是本程序的js主文件伟叛,包括如下內容:

      1. 在此文件中會引用model01.js模塊

      2. 引用vue.min.js(它也一個模塊)

      3. 將html頁面中構建vue實例的代碼放在main.js中。

        var {add} = require('./model01.js'); 
        var Vue = require('./vue.min');
        var VM = new Vue({
            el:"#app",//表示當前vue對象接管app的div區(qū)域
            data:{
                name:'黑馬程序員',// 相當于是MVVM中的Model這個角色
                num1:0, num2:0, result:0,
                url:'http://www.itcast.cn'
            },
            methods:{
                change:function(){
                    //這里使用了導入的model01.js文件中的add方法
                    this.result = add(Number.parseInt(this.num1),Number.parseInt(this.num2)) alert(this.result)
                }
            }
        })
        
    3. 打包測試

      上邊將mode01.js模塊及main.js主文件編寫完成脐嫂,下邊使用webpack對這些js文件進行打包

      1. 進入程序目錄统刮,執(zhí)行webpack main.js build.js ,這段指令表示將main.js打包輸出為 build.js文件執(zhí)行完成账千,觀察程序目錄是否出現(xiàn)build.js侥蒙。

      2. 在html中引用build.js

        <!DOCTYPE html>
        <html lang="en" xmlns:v‐on="http://www.w3.org/1999/xhtml">
            <head>
                <meta charset="UTF‐8">
                <title>vue.js入門程序</title>
            </head>
            <body>
                <div id="app">
                    <!‐‐{{name}}解決閃爍問題使用v‐text‐‐>
                    <a v‐bind:href="url"><span v‐text="name"></span></a>
                    <input type="text" v‐model="num1">+
                    <input type="text" v‐model="num2">=
                    <span v‐text="result"></span>
                    <!‐‐{{num1+num2}}‐‐>
                    <!‐‐<input type="text" v‐model="result">‐‐>
                    <button v‐on:click="change">計算</button>
                    <!‐‐ 在Vue接管區(qū)域中使用Vue的系統(tǒng)指令呈現(xiàn)數(shù)據(jù)這些指令就相當于是MVVM中的View這個角色 ‐‐>
                </div>
            </body>
            <script src="build.js"></script>
            <script>
            </script>
        </html>
        

3.4 webpack-dev-server

webpack-dev-server開發(fā)服務器,它的功能可以實現(xiàn)熱加載 并且自動刷新瀏覽器匀奏。

創(chuàng)建一個新的程序目錄鞭衩,這里我們創(chuàng)建webpacktest02目錄,將webpack入門程序的代碼拷貝進來娃善,并在目錄下創(chuàng) 建src目錄论衍、dist目錄。

將main.js和model01.js拷貝到src目錄会放。

3.4.1 安裝配置

  1. 安裝webpack-dev-server

    cnpm install webpack@3.6.0 webpack-dev-server@2.9.1 html-webpack-plugin@2.30.1 --save-dev
    

    安裝完成自動創(chuàng)建package.json(記錄了本程序所依賴的包信息)

    安裝完成自動創(chuàng)建node_modules(存放了本程序所依賴的包)

  2. 在package.json中配置script(運行命令)

    "scripts": {
        "dev": "webpack‐dev‐server ‐‐inline ‐‐hot ‐‐open ‐‐port 5008"
    },
    
  3. 配置webpack.config.js

    在webpacktest02目錄下創(chuàng)建 webpack.con?g.js

    webpack的配置文件饲齐,配置了入口文件、輸入文件的路徑咧最、依賴的插件。

    1. 配置模板文件

      將原來的vue_02.html作為模板文件御雕,為了和內存中的index.html文件名區(qū)別矢沿,注意將vue_02.html中的script標簽去掉,內容如下:

      <!DOCTYPE html>
      <html lang="en" xmlns:v‐on="http://www.w3.org/1999/xhtml">
          <head>
              <meta charset="UTF‐8">
              <title>vue.js入門程序</title>
          </head>
          <body>
              <div id="app">
                  <!‐‐{{name}}解決閃爍問題使用v‐text‐‐>
                  <a v‐bind:href="url"><span v‐text="name"></span></a>
                  <input type="text" v‐model="num1">+
                  <input type="text" v‐model="num2">=
                  <span v‐text="result"></span>
                  <!‐‐{{num1+num2}}‐‐>
                  <!‐‐<input type="text" v‐model="result">‐‐>
                  <button v‐on:click="change">計算</button>
                  <!‐‐ 在Vue接管區(qū)域中使用Vue的系統(tǒng)指令呈現(xiàn)數(shù)據(jù)這些指令就相當于是MVVM中的View這個角色 ‐‐>
              </div>
          </body>
      </html>
      
    2. 配置html-webpack-plugin

      在webpack.con?g.js中配置html-webpack-plugin插件

      var htmlwp = require('html‐webpack‐plugin'); 
      module.exports={
          entry:'./src/main.js', //指定打包的入口文件
          output:{
              path : dirname+'/dist', // 注意: dirname表示webpack.config.js所在目錄的絕對路徑
              filename:'build.js'   //輸出文件
          },
          plugins:[
              new htmlwp({
                  title: '首頁', //生成的頁面標題<head><title>首頁</title></head>
                  filename: 'index.html',  //webpack‐dev‐server在內存中生成的文件名稱酸纲,自動將build注入到這個頁面底部捣鲸,才能實現(xiàn)自動刷新功能
                  template: 'vue_02.html' //根據(jù)index1.html這個模板來生成(這個文件請程序員自己生成)
              })
          ]
      }
      
  4. 使用webpack的命令去運行程序

    進入 webpacktest02目錄,執(zhí)行

    npm run dev
    
  5. 使用debugger進行調試

    1. 在webpack.con?g.js中配置:

      devtool: 'eval‐source‐map',
      

      webpack.con?g.js部分內容如下:

      var htmlwp = require('html‐webpack‐plugin'); module.exports={
      entry:'./src/main.js', //指定打包的入口文件
      output:{
      path : dirname+'/dist', // 注意: dirname表示webpack.config.js所在目錄的絕對路徑
      filename:'build.js'   //輸出文件
      },
      devtool: 'eval‐source‐map',
      ......
      
    2. 在要打斷點的代碼處加debugger

4. CMS前端工程創(chuàng)建

4.1 導入系統(tǒng)管理前端工程

CMS系統(tǒng)使用Vue-cli腳手架創(chuàng)建闽坡, Vue-cli是Vue官方提供的快速構建單頁應用的腳手架栽惶,github地址: https://github.com/vuejs/vue-cli(有興趣的同學可以參考官方指導使用vue-cli創(chuàng)建前端工程)愁溜,本項目對Vue-cli 創(chuàng)建的工程進行二次封裝,下邊介紹CMS工程的情況外厂。

4.1.1 工程結構

如果我要基于Vue-Cli創(chuàng)建的工程進行開發(fā)還需要在它基礎上作一些封裝冕象,導入課程資料中提供Vue-Cli封裝工程。

將課程資料中的xc-ui-pc-sysmanage.7z拷貝到UI工程目錄中汁蝶,并解壓渐扮,用WebStorm打開xc-ui-pc-sysmanage目錄。

4.1.2 package.json

package.json記錄了工程所有依賴掖棉,及腳本命令:

  • 開發(fā)使用:npm run dev
  • 打包使用:npm run build

4.1.3 webpack.base.conf.js

webpack.base.conf.js就是webpack的webpack.con?g.js配置文件墓律,在此文件中配置了入口文件及各種Loader。

webpack是通過vue-load解析.vue文件幔亥,通過css-load打包css文件等耻讽。

4.1.4 main.js

main.js是工程的入口文件,在此文件中加載了很多第三方組件帕棉,如:Element-UI齐饮、Base64、VueRouter等笤昨。index.html是模板文件祖驱。

4.1.5 src目錄

src目錄下存放頁面及js代碼。

  • assets:存放一些靜態(tài)文件瞒窒,如圖片捺僻。
  • base:存放基礎組件
  • base/api:基礎api接口
  • base/component:基礎組件,被各各模塊都使用的組件base/router:總的路由配置崇裁,加載各模塊的路由配置文件匕坯。
  • common:工具類
  • component:組件目錄,本項目不用拔稳。
  • mock:存放前端單元測試方法葛峻。
  • module:存放各業(yè)務模塊的頁面和api方法。 下級目錄以模塊名命名巴比,下邊以cms舉例:
    • cms/api:cms模塊的api接口
    • cms/component:cms模塊的組件
    • cms/page: cms模塊的頁面
    • cms/router:cms模塊的路由配置
  • statics:存放第三方組件的靜態(tài)資源
  • vuex:存放vuex文件术奖,本項目不使用
  • static:與src的平級目錄,此目錄存放靜態(tài)資源
  • 它與assets的區(qū)別在于轻绞,static目錄中的文件不被webpack打包處理采记,會原樣拷貝到dist目錄下。

5. CMS前端頁面查詢開發(fā)

5.1 頁面結構

在model目錄創(chuàng)建 cms模塊的目錄結構

在page目錄新建page_list.vue政勃,擴展名為.vue唧龄。

.vue文件的結構如下:

<template>
<!‐‐編寫頁面靜態(tài)部分,即view部分‐‐>
測試頁面顯示...
</template>
<script>
    /*編寫頁面靜態(tài)部分奸远,即model及vm部分既棺。*/
</script>
<style>
    /*編寫頁面樣式讽挟,不是必須*/
</style>

在頁面的template中填寫 “測試頁面顯示...”。

注意:template內容必須有一個根元素丸冕,否則vue會報錯耽梅,這里我們在template標簽內定義一個div。

5.2 頁面路由

在cms目錄下創(chuàng)建page_list.vue頁面晨仑。

現(xiàn)在先配置路由褐墅,實現(xiàn)url訪問到頁面再進行內容完善與調試。

5.2.1 在cms的router下配置路由

import Home from '@/module/home/page/home.vue';
import page_list from '@/module/cms/page/page_list.vue'; 
export default [{
    path: '/cms',
    component: Home, 
    name: 'CMS內容管理', 
    hidden: false, 
    children:[
        {path:'/cms/page/list',name:'頁面列表',component: page_list,hidden:false}
    ]
}]

5.2.2 在base目錄下的router導入cms模塊的路由

5.3 頁面內容完善

根據(jù)需求完善頁面內容洪己,完善列表字段妥凳,添加分頁組件。

<template>
<div>
    <!--編寫頁面靜態(tài)部分答捕,即view部分-->
    <el-button type="primary" size="small" v-on:click="query">查詢</el-button>
    <el-table
              :data="list"
              stripe
              style="width: 100%">
        <el-table-column type="index" width="60">
    </el-table-column>
        <el-table-column prop="pageName" label="頁面名稱" width="120">
    </el-table-column>
        <el-table-column prop="pageAliase" label="別名" width="120">
    </el-table-column>
        <el-table-column prop="pageType" label="頁面類型" width="150">
    </el-table-column>
        <el-table-column prop="pageWebPath" label="訪問路徑" width="250">
    </el-table-column>
        <el-table-column prop="pagePhysicalPath" label="物理路徑" width="250">
    </el-table-column>
        <el-table-column prop="pageCreateTime" label="創(chuàng)建時間" width="180" >
    </el-table-column>
    </el-table>
    <el-pagination
                   layout="prev, pager, next"
                   :total="total"
                   :page-size="params.size"
                   :current-page="params.page"
                   v-on:current-change="changePage"
                   style="float:right">
    </el-pagination>
    </div>
</template>
<script>
    /*編寫頁面靜態(tài)部分逝钥,即model及vm部分。*/
    import * as cmsApi from '../api/cms'
    export default {
        data() {
            return {
                list: [],
                total:0,
                params:{
                    page:1,
                    size:10
                }
            }
        },
        methods:{
            query:function(){
                // alert('查詢')
                //調用服務端的接口
                cmsApi.page_list(this.params.page,this.params.size).then((res)=>{
                    //將res結果數(shù)據(jù)賦值給數(shù)據(jù)模型對象
                    this.list = res.queryResult.list;
                    this.total = res.queryResult.total;
                })

            },
            changePage:function(page){//形參就是當前頁碼
                //調用query方法
                // alert(page)
                this.params.page = page;
                this.query()
            }
        },
        mounted(){
            //當DOM元素渲染完成后調用query
            this.query()
        }
    }
</script>
<style>
    /*編寫頁面樣式拱镐,不是必須*/
</style>

5.4. Api調用

在cms模塊的api目錄定義cms.js艘款,

在cms.js中定義如下js方法,此方法實現(xiàn)http請求服務端頁面查詢接口沃琅。

//public是對axios的工具類封裝哗咆,定義了http請求方法
import http from './../../../base/api/public' 
export const page_list = (page,size,params) => {
    return http.requestQuickGet('http://localhost:31001/cms/page/list/'+page+'/'+size)
}

axios實現(xiàn)了http方法的封裝,vue.js官方不再繼續(xù)維護vue-resource,推薦使用 axios益眉。

前端頁面導入cms.js晌柬,調用js方法請求服務端頁面查詢接口。

  1. 導入cms.js

  1. 在query方法中調用 page_list方法

5.5 跨域問題解決

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:11000' is therefore not allowed access.

原因:瀏覽器的同源策略不允許跨域訪問郭脂,所謂同源策略是指協(xié)議年碘、域名、端口相同展鸡。 解決:采用proxyTable解決屿衅。

proxyTable是什么?

vue-cli 提 供 的 解 決 vue 開 發(fā) 環(huán) 境 下 跨 域 問 題 的 方 法 莹弊,proxyTable 的 底 層 使 用 了 http-proxy- middleware(https://github.com/chimurai/http-proxy-middleware)涤久,它是http代理中間件,它依賴node.js箱硕, 基本原理是用服務端代理解決瀏覽器跨域:

cms跨域解決原理:

  1. 訪問頁面http://localhost:11000/
  2. 頁面請求http://localhost:11000/cms由于url由http://localhost:31001/cms...改為“http://localhost:11000/cms."拴竹,所以不存在跨域
  3. 通過proxyTable由node服務器代理請求http://localhost:31001/cms.

服務端不存在跨域問題

具體的配置如下:

  1. 修改api方法中url的定義

    請求前加/api前綴

  1. 在con?g/index.js下配置proxyTable。

    以/api/cms開頭的請求剧罩,代理請求http://localhost:31001

5.6 分頁查詢

  1. 定義分頁視圖

    使用v-on監(jiān)聽更改分頁事件

    <el-pagination
                   layout="prev, pager, next"
                   :total="total"
                   :page-size="params.size"
                   :current-page="params.page"
                   v-on:current-change="changePage"
                   style="float:right">
    </el-pagination>
    
  2. 定義數(shù)據(jù)模型對象

    export default {
        data() {
            return {
                list: [],
                total:0,
                params:{
                    page:1,
                    size:10
                }
            }
        },
        methods:{
            query:function(){
                // alert('查詢')
                //調用服務端的接口
                cmsApi.page_list(this.params.page,this.params.size).then((res)=>{
                    //將res結果數(shù)據(jù)賦值給數(shù)據(jù)模型對象
                    this.list = res.queryResult.list;
                    this.total = res.queryResult.total;
                })
            },
            changePage:function(page){//形參就是當前頁碼
                //調用query方法
                // alert(page)
                this.params.page = page;
                this.query()
            }
        }
    

5.7 進入頁面立即查詢

目前實現(xiàn)的功能是進入頁面點擊查詢按鈕向服務端表求查詢,實際的需求是進入頁面立即查詢座泳。 如何實現(xiàn)惠昔?

這要用到vue的鉤子函數(shù)幕与,每個 Vue 實例在被創(chuàng)建時都要經(jīng)過一系列的初始化過程——例如,需要設置數(shù)據(jù)監(jiān)聽镇防、編譯模板啦鸣、將實例掛載到 DOM 并在數(shù)據(jù)變化時更新 DOM 等。同時在這個過程中也會運行一些叫做生命周期鉤子的函數(shù)来氧,這給了用戶在不同階段添加自己的代碼的機會诫给。

通常使用最多的是created和mounted兩個鉤子:

  • created:vue實例已創(chuàng)建但是DOM元素還沒有渲染生成。
  • mounted:DOM元素渲染生成完成后調用啦扬。

本例子在兩個方法的任意一個都滿足需求:

添加如下代碼

6. 前后端請求響應流程小結

  1. 在瀏覽器輸入前端url
  2. 前端框架vue.js根據(jù)url解析路由中狂,根據(jù)路由找到page_list.vue頁面
  3. 首先執(zhí)行page_list.vue中的鉤子方法
  4. 在鉤子方法中調用query方法。
  5. 在query方法中調用cms.js中的page_list方法
  6. cms.js中的page_list方法通過axios請求服務端接口
  7. 采用proxyTable解決跨域問題扑毡,node.js將請求轉發(fā)到服務端(http://localhost:31001/cms/page/list`)
  8. 服務端處理胃榕,將查詢結果響應給前端
  9. 成功響應調用then方法,在then方法中處理響應結果瞄摊,將查詢結果賦值給數(shù)據(jù)模型中的total和list變量勋又。
  10. vue.js通過雙向數(shù)據(jù)綁定將list數(shù)據(jù)渲染輸出。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末换帜,一起剝皮案震驚了整個濱河市楔壤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惯驼,老刑警劉巖蹲嚣,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跳座,居然都是意外死亡端铛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門疲眷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禾蚕,“玉大人,你說我怎么就攤上這事狂丝』幌” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵几颜,是天一觀的道長倍试。 經(jīng)常有香客問我,道長蛋哭,這世上最難降的妖魔是什么县习? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上躁愿,老公的妹妹穿的比我還像新娘叛本。我一直安慰自己,他們只是感情好彤钟,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布来候。 她就那樣靜靜地躺著,像睡著了一般逸雹。 火紅的嫁衣襯著肌膚如雪营搅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天梆砸,我揣著相機與錄音转质,去河邊找鬼。 笑死辫樱,一個胖子當著我的面吹牛峭拘,可吹牛的內容都是我干的。 我是一名探鬼主播狮暑,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鸡挠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搬男?” 一聲冷哼從身側響起拣展,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缔逛,沒想到半個月后备埃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡褐奴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年按脚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敦冬。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡辅搬,死狀恐怖,靈堂內的尸體忽然破棺而出脖旱,到底是詐尸還是另有隱情堪遂,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布萌庆,位于F島的核電站溶褪,受9級特大地震影響,放射性物質發(fā)生泄漏践险。R本人自食惡果不足惜猿妈,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一吹菱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧于游,春花似錦毁葱、人聲如沸垫言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筷频。三九已至蚌成,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凛捏,已是汗流浹背担忧。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坯癣,地道東北人瓶盛。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像示罗,于是被迫代替她去往敵國和親惩猫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容