質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2629閲覧

Vueファイルの中でonclickイベントで関数を使いたい

span

総合スコア32

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/12/16 16:20

前提・実現したいこと

単一コンポーネントのvueファイルの中でonclickイベントで関数を発火させて使いたいです
@click等での実行は選択できません
なぜかというとApiで返される値(<div onclick="hoge('fuga')">クリック</div>のようなonclickイベントのhtml構文)をv-htmlでハンドリングしてDOM生成するのでこちらでは@click等の形に書き換えることができません...

該当のソースコード

- main.js - import Vue from 'vue' import App from './App' new Vue({ el: '#app', render: h => h(App) })
- App.vue - <template> <div id="app"> <div onclick="hoge('fuga')">クリック</div> </div> </template> <script> export default { name: 'App', data() { return { } } } </script>

試したこと

- App.vue - <template> <div id="app"> <div onclick="hoge('fuga')">クリック</div> </div> </template> <script> function hoge(value){ console.log(value) } export default { name: 'App', data() { return { } } } </script>

上記のように普通にscriptタグの中で書けば呼べると思いましたがnot definedとなってしまいます。
こちらはどのように書けばvueファイルの中でonclickを使い関数を呼べるのでしょうか?
お手数ですがご教示いただければ幸いです。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

plasticgrammer

2020/12/17 00:21

イベントハンドラ(上記hoge関数)をmethodsに記載する方法では上手くいかないのでしょうか。
span

2020/12/19 13:11

ご回答ありがとうございます。 onclickイベントではmethodsにアクセスできないのです onclickでmethodsにアクセスする方法がありますでしょうか? ご教示いただければ幸いです。
guest

回答3

0

ベストアンサー

createdでwindowオブジェクトと紐づけるのはどうでしょうか。

js

1<template> 2 <div id="app"> 3 <div onclick="hoge('fuga')">クリック</div> 4 </div> 5</template> 6 7<script> 8 9export default { 10 name: 'App', 11 data() { 12 return { 13 14 } 15 }, 16 created() { 17 window.hoge = this.hoge; 18 }, 19 methods: { 20 function hoge(value){ 21 console.log(value) 22 } 23 } 24} 25</script>

投稿2020/12/19 23:00

plasticgrammer

総合スコア629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

span

2020/12/21 10:44

なるほどcreatedでwindowオブジェクトに関数登録すればよかったのですね! 恥ずかしながらこの発想は出てきませんでした…ご教示ありがとうございました!
guest

0

投稿2020/12/19 13:07

編集2020/12/19 16:05
span

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

App.vue は以下のようにしてみましょう。
つまり、関数は外ではなく、methodsの中に書かなければなりません。

<template> <div id="app"> <div onclick="hoge('fuga')">クリック</div> </div> </template> <script> export default { name: 'App', data() { return { } }, methods: { function hoge(value){ console.log(value) } } } </script>

投稿2020/12/17 06:59

kiritoxf

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

span

2020/12/19 16:04

ご回答ありがとうございます @clickを使うことができないのでmethodsをハンドリングする事ができないのです…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問