ページからnuxtのコンポーネントメソッドを呼び出すことは可能ですか?

ジャビメディナ

私はVue.jsを使い始めており、Nuxt.jsを使用しています。コンポーネント(スナックバー)を作成し、このコンポーネント内に、色とテキストの2つのパラメーターを渡して機能するメソッド「showSnackbar」を作成しました。したがって、showSnackbar(color、text)を呼び出すと、表示されます。

しかし、私はこのメソッドをページから呼び出したいと思います。このスナックバーを一部のページで使用したいので、常に同じコードを記述したくないので、コンポーネントを作成することにしました。しかし、このコンポーネント内のメソッドをページから呼び出すことはできません。

そのため、ページからコンポーネントメソッドを呼び出すことは可能かどうか疑問に思います(もちろん、コンポーネントをインポートします)

ローレンス・チェローネ

それを行うにはいくつかの方法があるかもしれません、私はプラグインを作成します

次に<snackbar/>、配置用のコンポーネントと、呼び出しメソッドを呼び出すためのグローバルAPIの両方があります。this.$snackbar.open({someOptions: '...'})

例えば:

にフォルダを作成し./plugins/snackbar、次の場所に配置します。

./plugins/snackbar/index.js

import Vue from "vue";
import snackbar from "~/plugins/snackbar/snackbar";

Vue.use(snackbar);

これはnuxt.config.js、をグローバルにロードするためのものです。これは次のようになります:

  ...
  /*
   ** Plugins to load before mounting the App
   ** Doc: https://nuxtjs.org/guide/plugins
   */
  plugins: ["~/plugins/snackbar/index.js"],
  ...

わかりました、今作成します

./plugins/snackbar/snackbar.js

これは、コンポーネントの状態を保持し、イベントプロキシとして機能するプラグインです。

import snackbar from "~/plugins/snackbar/snackbar.vue";

const Plugin = {
  install(Vue, options = {}) {
    /**
     * Makes sure that plugin can be installed only once
     */
    if (this.installed) {
      return;
    }
    this.installed = true;

    /**
     * Create event bus
     */

    this.event = new Vue();

    /**
     * Plugin methods
     */
    Vue.prototype.$snackbar = {
      show(options = {}) {
        Plugin.event.$emit("show", options, true);
      }
    };

    /**
     * Registration of <snackbar/> component
     */
    Vue.component("snackbar", snackbar);
  }
};

export default Plugin;

そして今...

./plugins/snackbar/snackbar.vue

魔法が起こる場所...

<template>
  <div>
    <transition name="snackbar">
      <div v-if="show" :class="['snackbar', 'box-shadow', type]">
        <slot>{{ options.text }}</slot>
      </div>
    </transition>

    <pre>options: {{ options }}</pre>
    <pre>show: {{ show }}</pre>
    <pre>type: {{ type }}</pre>
  </div>
</template>

<script>
import snackbar from "~/plugins/snackbar/snackbar";

export default {
  data: () => ({
    options: {
      text: "",
      type: ""
    },
    show: false,
    type: "",
    timer: 0
  }),
  beforeMount() {
    snackbar.event.$on("show", options => {
      this.options = options;
      this.type = options.type;
      this.show = true;
      this.close(this.options.closeWait || 3000);
    });
  },
  methods: {
    close(timeout) {
      clearTimeout(this.timer);
      this.timer = setTimeout(() => {
        this.show = false;
      }, timeout);
    }
  }
};
</script>

<style>
.snackbar {
  min-width: 300px;
  margin-left: -150px;
  background-color: #F48024;
  color: #fff;
  text-align: center;
  border-radius: 5px;
  padding: 16px;
  position: fixed;
  z-index: 1;
  left: 50%;
  bottom: 30px;
}

.snackbar.success {
  background-color: rgb(71, 244, 36);
}

.snackbar.danger {
  background-color: rgb(244, 36, 47);
}

.snackbar-enter-active {
  animation: snackbar-in 0.8s;
}
.snackbar-leave-active {
  animation: snackbar-in 0.8s reverse;
}
@keyframes snackbar-in {
  0% {
    transform: scale(0);
  }
  50% {
    transform: scale(1.2);
  }
  100% {
    transform: scale(1);
  }
}

.box-shadow {
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3),
    0 0 40px rgba(0, 0, 0, 0.1) inset;
  -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3),
    0 0 40px rgba(0, 0, 0, 0.1) inset;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
</style>

次に、それを使用するコンポーネント/ページ内で、を使用して配置し<snackbar/>、次のようなメソッドを呼び出すことができます

this.$snackbar.show({
  text: "Hello, snackbar!",
  type: "success"
});

上記の実用的な例はここにありますhttps://codesandbox.io/s/codesandbox-nuxt-oeo4h

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

BlazorのページコンポーネントからMainLayoutのメソッドを呼び出す

分類Dev

Nuxt.jsを使用してページコンポーネントのasyncData()メソッドからmixin関数を呼び出します

分類Dev

reactコンポーネントのrender()メソッドでreduxのstore.subscribeメソッドを呼び出すことはできますか?

分類Dev

mainメソッドからコンポーネントのメソッドを呼び出す方法は?

分類Dev

Angularの親のテンプレート内で子コンポーネントのメソッドを呼び出すことは良い習慣ですか?

分類Dev

親コンポーネントから子コンポーネントのメソッドを呼び出すにはどうすればよいですか?

分類Dev

子コンポーネントから親コンポーネントのメソッドを呼び出す

分類Dev

Emberコンポーネントのライフサイクルフックメソッド-スーパーを呼び出すことは必須ですか?

分類Dev

あるコンポーネントのメソッドを別のコンポーネントから呼び出す方法はangular2です。

分類Dev

コンポーネントはVueインスタンスからメソッドを呼び出すことができませんv-on:click

分類Dev

オブジェクト定義コンストラクター関数からメソッドを呼び出すことは可能ですか?

分類Dev

コンポーネント関数からアクションを呼び出すことは可能ですか?

分類Dev

Reactコンポーネントメソッドを外部から呼び出す

分類Dev

Angularの別のコンポーネントからメソッドを呼び出す方法は?

分類Dev

d3.call()からコンポーネントのメソッドを呼び出すことができません

分類Dev

EmberJSで親から子コンポーネントのメソッドを呼び出す方法

分類Dev

あるコンポーネントから別のコンポーネントにメソッドを呼び出す簡単な方法はありますか?

分類Dev

Angular:異なるモジュール内の別のコンポーネントからコンポーネントメソッドを呼び出す方法

分類Dev

reactの上位コンポーネントからインスタンスメソッドを呼び出す

分類Dev

Angular 2のあるコンポーネントから別のコンポーネントにメソッドを呼び出す方法は?

分類Dev

AndroidアプリケーションからSpringControllerPostメソッドを呼び出すことは可能ですか?

分類Dev

コンポーネントのメソッドをビューから呼び出すにはどうすればよいですか?(vue.js 2)

分類Dev

nativescriptのアプリイベントからコンポーネントメソッドを呼び出す方法

分類Dev

switchステートメント内でメソッドを呼び出すことは可能ですか?

分類Dev

コンポーネントからルートのメソッドを呼び出すと、コードの何が問題になりますか?

分類Dev

Javaで別のクラスのメインメソッドを呼び出して、呼び出し元のコードに戻ることは可能ですか?

分類Dev

Blazorの親コンポーネントから子コンポーネントメソッドを呼び出す方法は?

分類Dev

親コンポーネントから子コンポーネントのメソッドを呼び出す方法は?

分類Dev

React.jsの別のクラスコンポーネントからメソッドを呼び出すにはどうすればよいですか?

Related 関連記事

  1. 1

    BlazorのページコンポーネントからMainLayoutのメソッドを呼び出す

  2. 2

    Nuxt.jsを使用してページコンポーネントのasyncData()メソッドからmixin関数を呼び出します

  3. 3

    reactコンポーネントのrender()メソッドでreduxのstore.subscribeメソッドを呼び出すことはできますか?

  4. 4

    mainメソッドからコンポーネントのメソッドを呼び出す方法は?

  5. 5

    Angularの親のテンプレート内で子コンポーネントのメソッドを呼び出すことは良い習慣ですか?

  6. 6

    親コンポーネントから子コンポーネントのメソッドを呼び出すにはどうすればよいですか?

  7. 7

    子コンポーネントから親コンポーネントのメソッドを呼び出す

  8. 8

    Emberコンポーネントのライフサイクルフックメソッド-スーパーを呼び出すことは必須ですか?

  9. 9

    あるコンポーネントのメソッドを別のコンポーネントから呼び出す方法はangular2です。

  10. 10

    コンポーネントはVueインスタンスからメソッドを呼び出すことができませんv-on:click

  11. 11

    オブジェクト定義コンストラクター関数からメソッドを呼び出すことは可能ですか?

  12. 12

    コンポーネント関数からアクションを呼び出すことは可能ですか?

  13. 13

    Reactコンポーネントメソッドを外部から呼び出す

  14. 14

    Angularの別のコンポーネントからメソッドを呼び出す方法は?

  15. 15

    d3.call()からコンポーネントのメソッドを呼び出すことができません

  16. 16

    EmberJSで親から子コンポーネントのメソッドを呼び出す方法

  17. 17

    あるコンポーネントから別のコンポーネントにメソッドを呼び出す簡単な方法はありますか?

  18. 18

    Angular:異なるモジュール内の別のコンポーネントからコンポーネントメソッドを呼び出す方法

  19. 19

    reactの上位コンポーネントからインスタンスメソッドを呼び出す

  20. 20

    Angular 2のあるコンポーネントから別のコンポーネントにメソッドを呼び出す方法は?

  21. 21

    AndroidアプリケーションからSpringControllerPostメソッドを呼び出すことは可能ですか?

  22. 22

    コンポーネントのメソッドをビューから呼び出すにはどうすればよいですか?(vue.js 2)

  23. 23

    nativescriptのアプリイベントからコンポーネントメソッドを呼び出す方法

  24. 24

    switchステートメント内でメソッドを呼び出すことは可能ですか?

  25. 25

    コンポーネントからルートのメソッドを呼び出すと、コードの何が問題になりますか?

  26. 26

    Javaで別のクラスのメインメソッドを呼び出して、呼び出し元のコードに戻ることは可能ですか?

  27. 27

    Blazorの親コンポーネントから子コンポーネントメソッドを呼び出す方法は?

  28. 28

    親コンポーネントから子コンポーネントのメソッドを呼び出す方法は?

  29. 29

    React.jsの別のクラスコンポーネントからメソッドを呼び出すにはどうすればよいですか?

ホットタグ

アーカイブ