簡體   English   中英

從其他組件調用組件方法

[英]Call a component method from other component

我的頁面上顯示了一個播放列表列表。 此列表由外部 API 提供。 每個播放列表都有一個刪除按鈕,我正在嘗試使這個按鈕起作用。

API 中的刪除工作正常,因為播放列表已從 API 中刪除。 現在缺少的部分是從我的視圖中刪除播放列表。

我有一個名為“Playlists.vue”的組件,其中包含以下代碼:

<div class="playlists" v-if="playlists">
        <playlist v-for="playlist in playlists"
                  v-bind:key="playlist.id"
                  v-bind:playlist="playlist">
        </playlist>
        <span v-if="playlists.length === 0">No playlist found</span>
</div>

在 Playlists.vue 文件中,一個 fetchData 函數提供數據:

 methods: {
      async fetchData() {
        const playlists = await api.getAllPlaylists();
      }
    }

然后我有另一個組件來顯示單個播放列表 Playlist.vue :

<div class="row">
    <div class="col">
      <textarea v-model="playlist.name" v-on:blur="updatePlaylist"></textarea> 
      <button v-on:click="deletePlaylist(playlist.id)">Delete</button>
    </div>
  </div>

我嘗試在每次刪除后重新調用 fetchData 函數,以更新播放列表變量以獲取刪除后的更新列表。 所以我首先以這種方式導入組件 Playlists.js:

 import playlists from './Playlists';

然后我在刪除函數中調用了 fetchData 函數:

deletePlaylist(id) {
        playlist.deletePlaylist(id);
        playlists.fetchData();
},

但不幸的是它不起作用,我總是收到這個錯誤:

未捕獲的類型錯誤: WEBPACK_IMPORTED_MODULE_2__Playlists .a.fetchData 不是函數

我嘗試了其他解決方案,但我無法在 Playlist.vue 中調用 Playlists.vue 中的方法

任何修復? 或者可能是更好的解決方案?

非常感謝

我認為一個好的解決方案是使用 Mixin。 您可以按如下方式執行全局 Mixin。

Vue.mixin({
  methods: {
     async fetchData() {
       const playlists = await api.getAllPlaylists();
     }
  }
});

把它放在你的主 Vue 實例之前,它將可用於你的任何組件。

如果您不希望它在全球范圍內可用,請將其定義如下。

var fetchData = {
  methods: {
     async fetchData() {
       const playlists = await api.getAllPlaylists();
     }
  }
}

然后將其包含在您的組件定義中

  export default {
     mixins: [fetchData],
     data(){
        //...
     }
  }

更多關於 Mixins https://v2.vuejs.org/v2/guide/mixins.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM