1. 程式人生 > >認識單文件組件.vue 文件

認識單文件組件.vue 文件

編輯 描述 響應式 eight res 有一個 文字 list mod

vuejs 自定義了一種.vue文件,可以把html, css, js 寫到一個文件中,從而實現了對一個組件的封裝, 一個.vue 文件就是一個單獨的組件。由於.vue文件是自定義的,瀏覽器不認識,所以需要對該文件進行解析。 在webpack構建中,需要安裝vue-loader 對.vue文件進行解析。在 sumlime 編輯器中,我們 書寫.vue 文件,可以安裝vue syntax highlight 插件,增加對文件的支持。

  用vue-cli 新建一個vue項目,看一下.vue文件長什麽樣? 在新建項目的過程中,命令行中會詢問你幾個問題,當詢問是否安裝vue-router 時,這裏先選擇否。項目完成後,我們看到src 目錄下有一個componet 目錄,裏面有一個 Hello.vue 文件,內容如下,這裏對template 裏面的內容做了一些刪減。

復制代碼
<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
  </div>
</template>

<script>
export default {
  name: hello,
  data () {
    return {
      msg: Welcome to Your Vue.js App
    }
  }
}
</script> <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>

可以看到,在 .vue 文件中, template 中都是html 代碼,它定義了在頁面中顯示的內容,由於裏面還有變量,也可以說定義了一個模版;script中都是js 代碼,它定義這個組件中所需要的數據和及其操作,style 裏面是css 樣式,定義這個組件的樣式,scoped 表明這裏寫的css 樣式只適用於該組件,可以限定樣式的作用域。

(2)script 標簽中 export defalut 後面的對象的理解

在不使用.vue 單文件時,我們是通過 Vue 構造函數創建一個 Vue 根實例來啟動vuejs 項目,Vue 構造函數接受一個對象,這個對象有一些配置屬性 el, data, component, template 等,從而對整個應用提供支持。

new Vue({
  el: #app,
  data: {
        msg: "hello Vue"     
  }  
})

.vue文件中,export default 後面的對象 就相當於 new Vue() 構造函數中的接受的對象,它們都是定義組件所需要的數據(data), 以及操作數 據的方法等, 更為全面的一個 export default 對象,有methods, data, computed, 這時可以看到, 這個對象和new Vue() 構造函數中接受的對象是一模一樣的。但要註意data 的書寫方式不同。在 .vue 組件, data 必須是一個函數,它return(返回一個對象),這個返回的對象的數據,供組件實現。

 把項目中自帶的hello.vue 內容清空,我們自己寫一個組件來體驗一下這種相同。

<template>
  <div class="hello">
    <input type="txet" placeholder="請輸入文字" v-model="msg" @keypress.enter="enter">
    <p>{{upper}}</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
      msg: hello
    }
  },
  methods:{
    enter () {
      alert(this.msg);
    }
  },
  computed: {
    upper () {
      return this.msg.toUpperCase();
    }
  }
}
</script>

<style scoped>
  input {
    width: 200px;
    height: 20px;
  }
  p {
    color: red;
  }
</style>

頁面中有一個input輸入框,當進行輸入的時候,輸入框下面的內容會進行同步顯示,只不過它是大寫,當輸入完成後,按enter鍵就會彈出我們輸入的內容。獲取用戶輸入的內容,我們用的是v-model 指令,這個指令將用戶輸入的內容綁定到變量上,並且它響應式的,我們的變量值會隨著用戶輸入的變化而變化,也就是說我們始終獲取的都是用戶最新的輸入。下面大寫的顯示,用的是computed屬性,彈窗則是給綁定了一個keypress事件,通過描述,你會發現,它簡直就是一個vue實例,實際上它就是個vue實例。每一個vue組件都是一個vue實例,更容易明白 export default 後面的對象了。

.

認識單文件組件.vue 文件