首頁 web前端 js教程 怎樣使用vue元件與復用功能

怎樣使用vue元件與復用功能

May 25, 2018 pm 03:36 PM
功能 復用 組件

這次為大家帶來怎樣使用vue組件與復用功能,使用vue組件與復用功能的注意事項有哪些,下面就是實戰案例,一起來看一下。

一、什麼是元件

元件 (Component) 是 Vue.js 最強大的功能之一。元件可以擴充 HTML 元素,封裝可重複使用的程式碼。

二、元件用法

元件在註冊後才可以使用,註冊有全域註冊和局部註冊兩種方式。

2.1 全域註冊後,任何V ue 實例都可以使用。如:      

 <p id="app1">
      <my-component></my-component>
    </p>
Vue.component('my-component',{
  template: '<p>这里是组件的内容</p>'
});
var app1 = new Vue({
  el: '#app1'
});
登入後複製

 要在父親實例中使用這個元件,必須在實例建立前註冊,之後就可以用<my-component></my- component> 的形式來使用元件了

template的DOM結構必須被一個元素包含, 如果直接寫成“這裡是組件的內容”, 不含“<p></ p >”是無法渲染的。 (而且最外層只能有一個根的<p>標籤)

2.2 在Vue 實例中,使用component選項可以局部註冊元件,註冊後的元件只有在這個實例作用域下才有效。如:

    &lt;p id=&quot;app2&quot;&gt;
      &lt;my-component1&gt;&lt;/my-component1&gt;
    &lt;/p&gt;
var app2 = new Vue({
  el: '#app2',
  components:{
   'my-component1': {
     template: '&lt;p&gt;这里是局部注册组件的内容&lt;/p&gt;'
   }
  }
});
登入後複製

2.3 data必須是函數

除了template選項外,元件中還可以像Vue實例一樣使用其他的選項,例如data 、computed 、methods等。但是使用data時,和實例稍有區別, data 必須是函數,然後將資料return 出去。

    &lt;p id=&quot;app3&quot;&gt;
      &lt;my-component3&gt;&lt;/my-component3&gt;
    &lt;/p&gt;
Vue.component('my-component3',{
  template: '&lt;p&gt;{{message}}&lt;/p&gt;',
  data: function(){
    return {
      message: '组件内容'
    }
  }
});
var app3 = new Vue({
  el: '#app3'
});
登入後複製

 一般return的對像不要引用外部的對象,因為如果return 出的對象引用了外部的一個對象, 那這個對象就是共享的, 任何一方修改都會同步。

所以一般會給元件傳回一個新的獨立的data物件。

補充:vue-router 元件重複使用問題

#元件系統是Vue的重要組成部分,它可以將一個複雜的頁面抽象分解成許多小型、獨立、可重複使用的元件,透過組合元件來組成應用程序,結合vue-router的路由功能將各個元件對應到對應的路由上,透過路由的變化來告訴Vue要在哪裡渲染他們,實現各個元件、各個頁面之間的跳躍導航。

問題

使用vue-router切換路由時會觸發元件樹的更新,根據定義的路由渲染一個新的元件樹,大致的切換過程是這樣的:

- 停用並移除不需要的元件
- 驗證切換的可行性
- 復用沒有進行更新的元件
- 啟用並啟動新的元件

具體路由切換控制流程請參考官方文件:切換控制管線

那vue-router是怎麼判斷某一個元件可以重複使用的呢?我們來看看下面這條路由設定:

{
  path: 'post/:postId',
  name: 'post',
  component: resolve =&gt; require(['./components/Post.vue'],resolve)
}
登入後複製

這是透過文章ID載入對應文章頁面的路由,第一次造訪時,Post.vue這個元件會被渲染到元件樹中,mounted安裝元件時透過文章ID取得文章內容展示到頁面上,當我們訪問另一篇文章時,路由參數:postId發生改變,按照我們的預期應該會展示新文章的內容,但是事與願違。

我們看到的還是之前的文章,雖然路由參數已發生更改,但是vue-router會以為你訪問的是Post.vue這個組件,由於之前已經渲染過該組件,所以會直接復用之前的元件,並且不會執行元件中的任何操作包括mounted之類的生命週期函數。

所以我們最後看到的還是原來元件的內容。

那要怎麼才能實現我們期望的效果呢?以下介紹一個有效的解決方法

解決方法

#我們可以使用watch偵聽器來監聽路由的變化情況,根據路由參數的變化來回應對應的數據,具體實作過程是這樣的:

定義資料擷取方法

首先定义一个获取文章的方法,根据文章ID从后台获取对应的文章信息。

methods: {
  getPost(postId) {
    this.$http.get(`/post/get_post/${postId}`).then((response) =&gt; {
      if(response.data.code === 0){
        this.post = response.data.post;
      }
    });
  }
}
登入後複製

监听路由

接着是在路由切换的时候判断目标组件是否是Post.vue组件,这里可以根据定义的路由名称name实现,如果是,我们就可以从路由信息中获取目标文章ID来更新组件内容。

watch: {
  '$route' (to, from) {
    if(to.name === 'post'){
      this.getPost(to.params.postId);
    }
  }
}
登入後複製

组件初始化

这里需要注意的是,当组件首次被挂载到组件树上时,对路由的监听是无效的,这时我们需要在生命周期钩子mounted对组件进行初始化工作:

mounted() {
  this.getPost(this.$route.params.postId);
}
登入後複製

写在最后

通过上面的方法就可以实现组件内容随路由参数的变化而更新了,有效解决了vue-router组件复用导致路由参数失效的问题。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎么解决Angular5升级RxJS到5.5.3报错问题

使用vue技术容易忽略的7个点

以上是怎樣使用vue元件與復用功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

豆包app有什麼功能 豆包app有什麼功能 Mar 01, 2024 pm 10:04 PM

豆包app有什麼功能

vivox100s和x100區別:效能比較及功能解析 vivox100s和x100區別:效能比較及功能解析 Mar 23, 2024 pm 10:27 PM

vivox100s和x100區別:效能比較及功能解析

什麼是Discuz? Discuz的定義與功能介紹 什麼是Discuz? Discuz的定義與功能介紹 Mar 03, 2024 am 10:33 AM

什麼是Discuz? Discuz的定義與功能介紹

比較分析JPA和MyBatis的功能和性能 比較分析JPA和MyBatis的功能和性能 Feb 19, 2024 pm 05:43 PM

比較分析JPA和MyBatis的功能和性能

自媒體到底是什麼?它的主要特點和功能有哪些? 自媒體到底是什麼?它的主要特點和功能有哪些? Mar 21, 2024 pm 08:21 PM

自媒體到底是什麼?它的主要特點和功能有哪些?

PHP技巧:快速實現返回上一頁功能 PHP技巧:快速實現返回上一頁功能 Mar 09, 2024 am 08:21 AM

PHP技巧:快速實現返回上一頁功能

藍牙適配器的用途是什麼? 藍牙適配器的用途是什麼? Feb 19, 2024 pm 05:22 PM

藍牙適配器的用途是什麼?

小紅書帳號管理軟體有哪些功能?怎麼經營小紅書帳號? 小紅書帳號管理軟體有哪些功能?怎麼經營小紅書帳號? Mar 21, 2024 pm 04:16 PM

小紅書帳號管理軟體有哪些功能?怎麼經營小紅書帳號?

See all articles