Vue組件

Vue組件

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

單文件組件

  • 單文件組件:將一個組件相關(guān)的html結(jié)構(gòu)潘拱,css樣式和交互的Javascript從html文件剝離出來,合成的文件(一個組件具有了結(jié)構(gòu)拧略、表現(xiàn)和行為的完整功能芦岂,方便組合和重用),擴(kuò)展名為.vue

    // 使用template標(biāo)簽來定義html部分
    <template>
    
    </template>
    // javascript要寫成模塊導(dǎo)出的形式
    <script>
    
    </script>
    // css樣式
    <style>
    
    </style>
    
  • 環(huán)境配置(單文件組件不能直接運(yùn)行使用垫蛆,依賴于node項(xiàng)目對其進(jìn)行解析打包)

    • 安裝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

    • 創(chuàng)建項(xiàng)目目錄
      mkdir project

    • 進(jìn)入項(xiàng)目目錄禽最,初始化項(xiàng)目目錄

      cd project
      npm init
      #初始化完成后在當(dāng)前目錄中會生成一個package.json文件,該文件指定項(xiàng)目所以依賴的模塊
      
    • 配置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"
          }
      }
      #該文件定義了這個項(xiàng)目所需要的各種模塊月褥,以及項(xiàng)目的配置信息(比如名稱弛随、版本、許可證等元數(shù)據(jù))
      
    • 安裝項(xiàng)目依賴模塊
      npm install

      • npm install 命令根據(jù)這個配置文件宁赤,自動下載所需的模塊舀透,也就是配置項(xiàng)目所需的運(yùn)行和開發(fā)環(huán)境
    • 創(chuàng)建項(xiàng)目文件 main.js ,index.html, App.vue
      touch index.html main.js App.vue.

      • index.html文件時項(xiàng)目的首頁文件
      • main.js 文件定義vue及調(diào)用單文件組件,也是項(xiàng)目打包時所依賴的文件
      • App.vue文件為單文件組件文件
    • 創(chuàng)建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), //當(dāng)前目錄
              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對項(xiàng)目進(jìn)行打包時决左,需要指定相應(yīng)的配置文件愕够,同過配置文件對單文件組件中的各個內(nèi)容進(jìn)行解析,生成一個index.js的壓縮文件佛猛,在index.html只需引該文件就可進(jìn)行頁面加載渲染
      
    • 目錄創(chuàng)建完成后的結(jié)構(gòu)


      Snip20190404_1.png
  • 單文件組件打包

    • 項(xiàng)目搭建完成后需要分別對 main.js , index.html , App.vue 文件進(jìn)行編寫代碼
    • 項(xiàng)目打包npm run build
      • 文件編寫完成后并不能直接運(yùn)行index.html產(chǎn)生效果惑芭,需要對項(xiàng)目進(jìn)行打包生成一個渲染后的index.js文件進(jìn)行使用
      • 打包后會在當(dāng)前目錄下生成一個index.js 文件,在index.html中引用該文件继找,運(yùn)行index.html文件看到效果
    • 項(xiàng)目調(diào)試運(yùn)行
      // 在項(xiàng)目目錄下遂跟,執(zhí)行下面指令可以開啟前端服務(wù),自動運(yùn)行前端代碼
      ./node_modules/.bin/webpack-dev-server
      
  • 多個單文件組件使用

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

    • Element-ui將樣式封裝成單文件組件凯亮,可以直接集成到項(xiàng)目中
      -從網(wǎng)址element中復(fù)制一段div標(biāo)簽,即樣式
    • 將復(fù)制的樣式復(fù)制到components中.vue文件的template標(biāo)簽中(在template中新添加div標(biāo)簽)
    • 在router.js中添加該樣式文件的路由匹配哄尔,進(jìn)行分發(fā)操作
    • 在main.jszhong 導(dǎo)入ElementUI并使用Vue.use(ElementUI)

vue-cli的使用

  • 借助vue-cli創(chuàng)建出我們的所有項(xiàng)目文件
  • 步驟
    • 全局安裝vue-cli npm install --global vue-cli
    • 項(xiàng)目創(chuàng)建 vue init webpack 項(xiàng)目名
    • 運(yùn)行調(diào)試項(xiàng)目 npm run dev在項(xiàng)目目錄下執(zhí)行此指令
    • 項(xiàng)目打包npm run build
  • 生成的目錄文件
    • src假消,主開發(fā)目錄,要開發(fā)的單文件組件全部在這個目錄下
    • static岭接,靜態(tài)資源目錄富拗,所有的css,js文件放在這個文件夾
    • components鸣戴,組件目錄啃沪,vue格式的單文件組件都存在這個目錄中
    • router,路由目錄葵擎,在此文件夾中配置組件路由
    • node_modules目錄是node的包目錄
    • config是配置目錄谅阿,build是項(xiàng)目打包時依賴的目錄
  • 頁面結(jié)構(gòu)說明
    • 整個項(xiàng)目是一個主文件index.html,index.html中會引入src文件夾中的main.js,main.js中會導(dǎo)入頂級單文件組件App.vue,App.vue中會通過組件嵌套或者路由來引用components文件夾中的其他單文件組件。


      Snip20190404_6.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酬滤,一起剝皮案震驚了整個濱河市签餐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盯串,老刑警劉巖氯檐,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異体捏,居然都是意外死亡冠摄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門几缭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來河泳,“玉大人,你說我怎么就攤上這事年栓〔鸹樱” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵某抓,是天一觀的道長纸兔。 經(jīng)常有香客問我,道長否副,這世上最難降的妖魔是什么汉矿? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮备禀,結(jié)果婚禮上洲拇,老公的妹妹穿的比我還像新娘奈揍。我一直安慰自己,他們只是感情好赋续,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布打月。 她就那樣靜靜地躺著,像睡著了一般蚕捉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柴淘,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天迫淹,我揣著相機(jī)與錄音,去河邊找鬼为严。 笑死敛熬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的第股。 我是一名探鬼主播应民,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夕吻!你這毒婦竟也來了诲锹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤涉馅,失蹤者是張志新(化名)和其女友劉穎归园,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稚矿,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庸诱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晤揣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桥爽。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昧识,靈堂內(nèi)的尸體忽然破棺而出钠四,到底是詐尸還是另有隱情,我是刑警寧澤滞诺,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布形导,位于F島的核電站,受9級特大地震影響习霹,放射性物質(zhì)發(fā)生泄漏朵耕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一淋叶、第九天 我趴在偏房一處隱蔽的房頂上張望阎曹。 院中可真熱鬧,春花似錦、人聲如沸处嫌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熏迹。三九已至檐薯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間注暗,已是汗流浹背坛缕。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捆昏,地道東北人赚楚。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像骗卜,于是被迫代替她去往敵國和親宠页。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容