理解最基本的Vue項目

来源:http://www.cnblogs.com/nangxi/archive/2017/08/08/7307080.html
-Advertisement-
Play Games

上一篇《Vue開發環境搭建及熱更新》,我們講解了vue開發環境的搭建還有一些小問題,接下來我們來講解一下這個界面是如何形成的。 在開始講之前,我們先來看看我們上一篇所謂的項目目錄裡面到底放著什麼。 1.index.html文件入口 ; 2.src放置組件和入口文件 ; 3.node_modules為 ...


上一篇《Vue開發環境搭建及熱更新》,我們講解了vue開發環境的搭建還有一些小問題,接下來我們來講解一下這個界面是如何形成的。

在開始講之前,我們先來看看我們上一篇所謂的項目目錄裡面到底放著什麼。

1.index.html文件入口 ;

2.src放置組件和入口文件 ;

3.node_modules為依賴的模塊 ;

4.config中配置了路徑埠值等;

5.dist是存放打包之後的東西;

6.build中配置了webpack的基本配置、開發環境配置、生產環境配置等。

一、src文件夾

我們先從src文件夾開始說起

我們先進入src,在src目錄下輸入ls,ls是查看當前目錄的命令行。我們發現src文件夾裡面有App.vue文件,assets文件夾,components文件夾,main.js文件,還有router文件夾。

看過前一篇推薦的慕課網視頻我們就知道,項目的打包需要一個入口文件,那這個入口文件在哪裡呢?在build目錄下,有一個webpack.base.conf.js文件,裡面有這麼一段代碼。

entry定義的就是入口文件,我們可以看到src目錄下的main.js文件就是入口文件。App.vue是主組件,所有組件都是在App.vue下進行切換的。components文件夾就是存放組件的地方,像我們這個項目,裡面就只是存放著一個Hello組件(關於vue組件的相關知識,這裡推薦一位大神keepfool的博客,有兩篇,這裡鏈接的是上篇),assets文件夾存放的是圖片,router文件夾存放的是路由(關於vue-router的相關知識,keepfool大神也有相關的文章)。

二、components文件夾

該文件夾下麵只有Hello.vue這個文件。一個.vue文件包含三個部分<template><script><stype>。現在的項目基本都用ES6的寫法(ES6的優勢在於模塊化Module,當然這隻是其中一個優勢,估計以後會慢慢的變ES6為主流),雖然vue的官方文檔還是用ES5的語法,但是這種ES6寫法慢慢看還是看得懂的。

Hello.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    <ul>
      <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
      <li><a href="https://gitter.im/vuejs/vue" target="_blank">Gitter Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
      <br>
      <li><a href="http://vuejs-templates.github.io/webpack/" target="_blank">Docs for This Template</a></li>
    </ul>
    <h2>Ecosystem</h2>
    <ul>
      <li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
      <li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
      <li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'hello',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
  font-weight: normal;
}

ul {
  list-style-type: none;
  padding: 0;
}

li {
  display: inline-block;
  margin: 0 10px;
}

a {
  color: #42b983;
}
</style>

1.<template>標簽

<template>標簽裡面有個class為hello的div,在<script>裡面的name也為hello,在這裡這兩者之間沒有什麼聯繫,就算把class=“hello”刪掉,結果還是一樣(可以試試看)。

在ES5中,有一種寫法和<template>類似,那就是<script>標簽:

<!--HTML-->
<div id="app">
    <my-component></my-component>
</div>
<script type="text/x-template" id="myComponent">
    <div>Hello world</div>
</script>
<!--Js-->
Vue.component('my-component',{template:'#myComponent'})
new Vue({el:'#app'})//掛載到id為app的div上

<script>將<div>Hello world</div>替換到<my-component>的位置。使用<script>標簽時,設置type意在告訴瀏覽器這不是一段js腳本,然後將這個元素的HTML作為模板進行編譯。用<template>的寫法是這樣的

<!--HTML-->
<div id="app">
    <my-component></my-component>
</div>
<template id="myComponent">
    <div>Hello world</div>
</template>
<!--Js-->
Vue.component('my-component',{template:'#myComponent'})
new Vue({el:'#app'})//掛載到id為app的div上

 用起來其實差不多。

2.<script>

組件裡面的data,要寫為函數的形式

data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  }

否則寫成以下的形式會出錯

data:{
    msg: 'Welcome to Your Vue.js App'
  }

這一點在vue的官網中,data必須是函數小節也有提到。

3.<style>

我們會發現<style>標簽裡面還有個小東西,叫做scoped,加入這個詞有什麼作用呢?

在vue組件中我們我們經常需要給style添加scoped來使得當前樣式只作用於當前組件的節點。

三、App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: 'app'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

在<template>裡面,我們發現了一個標簽<router-view>,通過我們在網頁上的比對,我們可以知道<img>圖片下麵就是我們剛剛分析得半死的hello組件。那為什麼它會變成了<router-view>,這就是路由的作用。在頁面上使用<router-view></router-view>標簽,它用於渲染匹配的組件。那怎麼知道<router-view>代表的就是hello組件。接著下一點就是原因。

四、router文件夾裡面的index.js

import Vue from 'vue'
import Router from 'vue-router'
import Hello from '@/components/Hello'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Hello',
      component: Hello
    }
  ]
})

 首先它導入了vue模塊,引入了vue-router插件,還有components目錄下的Hello.vue(此處省略了.vue尾碼,效果一樣)。從export default開始都是配置使用路由的,當途徑為“/”的時候,就顯示hello組件(這些語法在keepfool大神的博客都有提到)。我們剛剛打開時候的頁面,地址欄顯示的地址是http://localhost:8080/#/,後面這個橫杠,匹配的就是hello組件,所以前一節<router-view>代表的就是hello組件。在地址欄中,“/”是預設加上去的,也就是說,就算你在輸入地址的時候,不給它加上“/”,只有http://localhost:8080/#這樣,回車之後也會自動加上。

五、入口文件main.js

前面我們知道了,入口文件是main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

首先導入vue模塊,導入App.vue(App.vue已經把components文件夾裡面的組件都整合在一起了,所以在入口文件我們導入它就行了),最後是導入router目錄下的index.js。如果import xx form ‘一個文件夾’,打包的時候會自動查找文件夾裡面的index.js文件。之前我挺納悶為什麼new Vue裡面有router這種只有鍵沒有值的寫法,其實它相當於router:routers,這個其實我們開頭已經導入並賦值給router了。關於template鍵,其實它的值寫成<App></App>也是可以的。

接下來就是組件的掛載,如果一個組件沒有掛載,那就相當聲明瞭之後卻沒有使用它。我們將它掛載到id為app的div上,這個id為app又是在哪裡?很簡單,就在src同級目錄下的index.html文件里。

六、index.html

前一篇文章第八點我們說到,最後打包完生成了一些東西,其中有一個就是app.js

這個app.js就是以main.js 為入口文件打包之後生成的。最後渲染頁面的文件,就是導入了app.js 的index.html文件。看到這裡相信大家對這個項目有了新的認識,但是有個小問題很多人容易混淆。

七、一個小問題

export default {} 跟 var vm = new Vue({}) 完全不是同一回事,前者是ES6的module中的語法,後者是創建一個vue實例。export的相關問題,大家可以點擊一下這個鏈接

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大圖輪播完整流程代碼操作: <style> * { margin: 0px; padding: 0px; } .stage { width: 500px; height: 300px; border: 5px solid black; margin: 200px; position: relativ ...
  • get請求代碼: api.ajax({ url:'http://m.weather.com.cn/data/101010100.html' //天氣預報網站的WebService介面},function(ret,err){ if (ret) { api.alert({msg:JSON.stringi ...
  • canvas背景效果: ...
  • 一、css簡介 css(Cascading Style Sheets)層疊樣式表,是一種為html文檔添加樣式的語言,主要有兩個功能:渲染和佈局。使用css主要關註兩個點:查找到標簽,屬性操作 二、css的引入方式 (1)行內式引入: 直接在html語句的屬性中設置,這種方法的缺點是html代碼和c ...
  • Babel是一個廣泛使用的轉碼器,可以將ES6代碼轉譯為ES5代碼,從而在現有環境下執行。 舉例說明: 轉譯前(ES6格式)代碼如下: 轉譯後(ES5格式)代碼如下: 如上用Babel轉譯為ES5格式後就可以在現有的javascript環境下運行了。 babel安裝與項目部署步驟如下: 1.新建一個 ...
  • 1.封裝$函數 2.取色器 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script src="js/select.js"></script> ...
  • 新建項目 開始(確認已經安裝node環境和npm包管理工具) 1、新建項目文件名為start_vuedemo 2、npm init -y 初始化項目,我的win7系統,工程在d盤的vue_test_project文件夾下的名為start_vuedemo的工程文件夾 如圖所示: 在該工程下自動生成一個 ...
  • 響應式網格系統 ======================================== 響應式網格系統的概念 把網頁劃分成列、行、外邊距、隔離帶(各列與各行之間的空白)等由一系列相交的水平軸和垂直軸組成的網格。 網格佈局的作用在於更有效地控制元素在網頁中所占比例的大小。比如,博客中有一個留 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...