Vue組件

Vue組件

  • vue組件:封裝前端vue特效代碼,便于引用
  • 全局組件
    • 全局組件通過Vue.component在script標簽中注冊
      • 參數1:指定組件名稱
      • 參數2:{}對象,{}內通過template指定組件要加載的內容
    • 全局組件調用:在div標簽中通過組件名稱進行調用
  • 局部組件
    • 局部組件定義:var 組件名稱={}對象,{}內通過template指定組件要加載的內容
    • 在全局組件中定義components屬性,components:{}將局部組件注冊到全局組件中,進行組件的嵌套
    • 在全局組件的template屬性中調用局部組件
    • 局部組件定義在全局組件之前,才能調用
  • 組件中的數據綁定data,data屬性對應的是一個函數方法,函數中返回綁定的數據
    • 在template中對指定的數據進行調用
  • 組件傳值
    • 父組件通過props屬性給子組件傳值
      • 子組件中定義props:['用來接收父組件值的變量']
      • 子組件template中調用該變量{{變量}}
      • 全局組件中調用子組件時,通過v-bind:變量='父組件要傳的值'指定父組件的傳值
    • 子組件通過$emit給父組件傳值
      • 子組件template中綁定觸發事件<button v-on:click="isupload"> 上傳</button>
      • 子組件定義 methods:{isupload:function(){this.emit('事件',’數據‘)}},子組件上的點擊事件成功后,通過emit 將事件和數據傳遞給父組件
      • 父組件的子組件標簽中綁定監聽事件(處理子組件的事件)
      • 父組件定義監聽子組件事件的方法

單文件組件

  • 單文件組件:將一個組件相關的html結構,css樣式和交互的Javascript從html文件剝離出來,合成的文件(一個組件具有了結構、表現和行為的完整功能,方便組合和重用),擴展名為.vue

    // 使用template標簽來定義html部分
    <template>
    
    </template>
    // javascript要寫成模塊導出的形式
    <script>
    
    </script>
    // css樣式
    <style>
    
    </style>
    
  • 環境配置(單文件組件不能直接運行使用,依賴于node項目對其進行解析打包)

    • 安裝node版本管理工具nvm

      curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
      // 更新配置
      source .bashrc
      
    • 安裝最新版本的node
      nvm install node

    • 更新npm的安裝源
      npm config set registry https://registry.npm.taobao.org

    • 創建項目目錄
      mkdir project

    • 進入項目目錄,初始化項目目錄

      cd project
      npm init
      #初始化完成后在當前目錄中會生成一個package.json文件,該文件指定項目所以依賴的模塊
      
    • 配置package.json文件

      {
      "name": "project",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1",
          "build": "webpack"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
          "babel-core": "^6.22.1",
          "babel-loader": "^7.1.1",
          "babel-preset-env": "^1.3.2",
          "babel-preset-stage-2": "^6.22.0",
          "babel-register": "^6.22.0",
          "css-loader": "^0.28.11",
          "element-ui": "^2.7.2",
          "file-loader": "^1.1.4",
          "lodash": "^4.17.4",
          "style-loader": "^0.23.1",
          "url-loader": "^1.1.2",
          "vue": "^2.6.10",
          "vue-loader": "^15.7.0",
          "vue-router": "^3.0.2",
          "vue-style-loader": "^3.0.1",
          "vue-template-compiler": "^2.5.2",
          "webpack": "^4.29.6",
          "webpack-cli": "^3.3.0",
          "webpack-dev-server": "^3.2.1"
          }
      }
      #該文件定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)
      
    • 安裝項目依賴模塊
      npm install

      • npm install 命令根據這個配置文件,自動下載所需的模塊,也就是配置項目所需的運行和開發環境
    • 創建項目文件 main.js ,index.html, App.vue
      touch index.html main.js App.vue.

      • index.html文件時項目的首頁文件
      • main.js 文件定義vue及調用單文件組件,也是項目打包時所依賴的文件
      • App.vue文件為單文件組件文件
    • 創建webpacke打包的配置文件webpack.config.js

      const path = require('path')
      const VueLoaderPlugin = require('vue-loader/lib/plugin');
      
      module.exports = {
          entry: { main: "./main.js" }, //入口文件
          output: {
              filename: 'index.js', //出口文件名
              path: path.resolve(__dirname), //當前目錄
              library: 'index' // 打包后模塊的名稱
          },
          plugins: [
              // make sure to include the plugin for the magic
              new VueLoaderPlugin()
          ],
          module: {
              rules: [ //定義不同類型的文件使用的loader
                  {
                      test: /\.vue$/,
                      loader: 'vue-loader'
                  },
                  {
                      test: /\.js$/,
                      loader: 'babel-loader'
                  },
                  {
                      test: /\.css$/,
                      loader: 'vue-style-loader',
                  },
                  {
                      test: /\.css$/,
                      loader: 'css-loader',
                      options: {
                          minimize: true //添加
                      }
                  }, 
                  {
                      test: /\.(eot|svg|ttf|woff|woff2)$/,
                      loader: 'file-loader'
                    },
              ]
          }
      }
      #在通過webpack對項目進行打包時,需要指定相應的配置文件,同過配置文件對單文件組件中的各個內容進行解析,生成一個index.js的壓縮文件,在index.html只需引該文件就可進行頁面加載渲染
      
    • 目錄創建完成后的結構


      Snip20190404_1.png
  • 單文件組件打包

    • 項目搭建完成后需要分別對 main.js , index.html , App.vue 文件進行編寫代碼
    • 項目打包npm run build
      • 文件編寫完成后并不能直接運行index.html產生效果,需要對項目進行打包生成一個渲染后的index.js文件進行使用
      • 打包后會在當前目錄下生成一個index.js 文件,在index.html中引用該文件,運行index.html文件看到效果
    • 項目調試運行
      // 在項目目錄下,執行下面指令可以開啟前端服務,自動運行前端代碼
      ./node_modules/.bin/webpack-dev-server
      
  • 多個單文件組件使用

    • 在project目錄下創建components文件夾,將所有子組件放入components文件夾下
    • 多組件嵌套使用
      • 在新建的components文件夾中定義多個子組件
      • 在App.vue的script標簽中導入并注冊多個子組件,在template標簽中調用子組件
      • npm run build 重新生成index.js文件
    • 多組件路由使用(使用路由形式阻隔多個單路由)
      • 定義路由目錄和路由文件router.js
      • 在main.js文件中導入并使用router
      • 在App.vue中指明路由標簽
      • 運行項目./node_modules/.bin/webpack-dev-server
  • Element-ui

    • Element-ui將樣式封裝成單文件組件,可以直接集成到項目中
      -從網址element中復制一段div標簽,即樣式
    • 將復制的樣式復制到components中.vue文件的template標簽中(在template中新添加div標簽)
    • 在router.js中添加該樣式文件的路由匹配,進行分發操作
    • 在main.jszhong 導入ElementUI并使用Vue.use(ElementUI)

vue-cli的使用

  • 借助vue-cli創建出我們的所有項目文件
  • 步驟
    • 全局安裝vue-cli npm install --global vue-cli
    • 項目創建 vue init webpack 項目名
    • 運行調試項目 npm run dev在項目目錄下執行此指令
    • 項目打包npm run build
  • 生成的目錄文件
    • src,主開發目錄,要開發的單文件組件全部在這個目錄下
    • static,靜態資源目錄,所有的css,js文件放在這個文件夾
    • components,組件目錄,vue格式的單文件組件都存在這個目錄中
    • router,路由目錄,在此文件夾中配置組件路由
    • node_modules目錄是node的包目錄
    • config是配置目錄,build是項目打包時依賴的目錄
  • 頁面結構說明
    • 整個項目是一個主文件index.html,index.html中會引入src文件夾中的main.js,main.js中會導入頂級單文件組件App.vue,App.vue中會通過組件嵌套或者路由來引用components文件夾中的其他單文件組件。


      Snip20190404_6.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容