Vueのv-onパラメータの問題についてお話しましょう

Vueのv-onパラメータの問題についてお話しましょう

Vue での v-on:clock の使用

現在、vue.js フレームワークを学習しています。後で参照できるように、発生した問題をメモしておいてください。

まず、次のページをご覧ください (観察しやすいように、各ラベルは 1 つずつ色分けされています)。

HTML コードは次のとおりです。

<div class="groupbody">
   <ul class="リスト">
     <li v-for="todo.groupbody 内のセル " class="pagegroupcell " v-on:click="exchange($event)">
       <div class="pagecelltext">{{ cell.left }}</div>
       <div class="pagecellmin">{{ cell.min }}</div>
       <img src="img/images/direction/right.png" style="width: 20px;height: 30px;float: right;margin-top: 5px;">
       <div class="pagecellmsg">{{ cell.right }}</div> 
      </li>
    </ul>
    <div class="clear"></div>
</div>

js コードの箇所:

交換: 関数 (イベント) {
            alert("メソッドの実行を開始します");
            var a = イベント.ターゲット;
            var cellimg = a.getElementsByTagName("div")[0];
            var msg = cellimg.innerText; 
            page2datas.todos[0].groupheader = メッセージ;
            alert("メソッドが実行中です"); 
            var b = document.getElementById("page1");
            b.style.display = "なし";
            var c = document.getElementById("page2");
            c.style.display = "ブロック";
            alert("メソッドの実行が終了しました");
          }

このとき、セル内の色付きの領域をクリックすると(つまり、li タグのテキスト ラベルをクリックすると)、最初の alert() メソッドのみが実行され、次の 2 つのメソッドは実行されません。

その理由は、このメソッドのイベント パラメータにあります。

タグ バインディング メソッドにパラメーター $event がある場合は、event.target を使用して、現在のポイントのクリック イベントにバインドされているタグを取得できます。

ただし、このパラメータによって問題が発生する可能性もあります。たとえば、li タグのどの部分がクリックされたかに関係なく、クリック イベント メソッドを完全に実行したい場合、イベント パラメータは適用されません。現時点では、他の解決策しか考えられません。

解決:

li には v-for ループがあり、その中には li タグ内のデータを含むセル オブジェクトがあります。このオブジェクトをクリック イベント メソッドに渡すだけで、このオブジェクトを使用して目的を達成できます。

変更された HTML コード:

<div class="groupbody">
   <ul class="リスト">
     <li v-for="todo.groupbody 内のセル " class="pagegroupcell " v-on:click="exchange(cell)">
       <div class="pagecelltext">{{ cell.left }}</div>
       <div class="pagecellmin">{{ cell.min }}</div>
       <img src="img/images/direction/right.png" style="width: 20px;height: 30px;float: right;margin-top: 5px;">
       <div class="pagecellmsg">{{ cell.right }}</div> 
      </li>
    </ul>
    <div class="clear"></div>
</div>

変更された js コード:

 交換: 関数 (セル) {
        alert("メソッドの実行を開始します"); 
        page2datas.todos[0].groupheader =セル.left;
        alert("実行中");
        var b = document.getElementById("page1");
        b.style.display = "なし";
        var c = document.getElementById("page2");
        c.style.display = "ブロック";
        alert("メソッドの実行が終了しました");
      }

この時点で、電気ショックイベント実行メソッド全体を完全に実行でき、その後のページ切り替えも完了できます。

補足: Vue でクリック イベントを v-on にバインドする際のパラメータの問題

クリック イベントを v-on にバインドする場合のパラメータに関しては、次の 3 つのケースがあります。

バインドメソッドの後に括弧はありません

 <button @click="btnClick">クリック</button>
 <スクリプト>
 constアプリ = 新しいVue({
  方法:{
  btnClick(イベント){
  // この時点で、eventは現在クリックされているオブジェクトです console.log(event)
  }
  }
 })
 </スクリプト>

境界法の後に括弧が続く

<button @click="btnClick()">クリック</button>
<スクリプト>
 constアプリ = 新しいVue({
 方法:{
  btnClick(イベント){
  // この時点でイベントは未定義です
  console.log(イベント)
  }
 }
 })
</スクリプト>

バインドされたメソッドの後に括弧があり、パラメータを渡す必要がある

<button @click="btnClick(123)">クリック</button>
<スクリプト>
 constアプリ = 新しいVue({
 方法:{
  btnClick(イベント){
  // この時点でイベントは123です
  console.log(イベント)
  }
 }
 })
</スクリプト>

バインドされたメソッドの後に括弧があり、パラメーターと現在クリックされているオブジェクトを渡す必要があります。

<!-- この場合、現在クリックされているオブジェクトを渡す必要がある場合は、パラメータは $event にする必要があります -->
<!-- 最初の位置に数値を渡す場合は、引用符を追加する必要はありません。文字列を渡す場合は、引用符を追加する必要があります。引用符を追加しないと、Vue はそれを変数として解析します。データで定義されていない場合は、エラーが報告されます。 -->
<button @click="btnClick(123,$event)">クリック</button>
<スクリプト>
 constアプリ = 新しいVue({
 方法:{
  btnClick(数値,イベント){
  // この時点で、numは123、eventは現在クリックされているオブジェクトです。
  console.log(数値、イベント)
  }
 }
 })
</スクリプト>

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • vue v-on:click で動的パラメータを渡す手順
  • Vue における v-on イベント監視命令の基本的な使用方法の詳細な説明
  • Vue.js における v-on イベント命令の使用に関する簡単な説明

<<:  iptables および firewalld ツールを使用して Linux ファイアウォール接続ルールを管理する

>>:  MySQLのネストされたトランザクションで発生する問題

推薦する

3分でUbuntu 16.04を初期化し、Java、Maven、Docker環境をデプロイする

Fast-Linux プロジェクト アドレス: https://gitee.com/uitc/Fas...

MySQL ステートメントにおける IN と Exists の比較分析

背景最近、SQL 文を書くときに、IN と Exists のどちらを選択するか迷ったので、両方の方法...

Mysql マスタースレーブレプリケーションの注意事項の説明

1. マスター'x@xxxx:x'への接続エラー- 再試行時間: 60 再試行回数:...

Linuxコマンドのファイル上書きとファイル追加の詳細な説明

1. コマンド > と >> の違いコマンド>: ファイルが存在する場合は、...

AngularJSループオブジェクトプロパティで動的列を実装するアイデアの詳細な説明

動的な列を実現するための Angularjs ループ オブジェクト プロパティ利点: オブジェクトを...

Vue.js ドロップダウン コンポーネント付きテキストボックス

ドロップダウン付きのテキストボックスを使用すると、ユーザーはドロップダウン リストから入力を選択した...

Webフロントエンドツール、Sublime Text 2の紹介

Sublime Text 2 は、軽量でシンプル、効率的なクロスプラットフォーム エディターです。ブ...

Webスキル: 複数のIEバージョンの共存ソリューション IETester

私のおすすめ複数のIEバージョンの共存のためのソリューション以前に IE6、IE7、IE8 の共存に...

Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

方法 1: 設定ファイルを変更する (docker サービスを停止する必要があります) 1. doc...

JavaScriptはスタック構造の詳細なプロセスを実装する

目次1. スタック構造を理解する2. スタック構造のカプセル化3. 10進数を2進数に変換する1. ...

Linux ファイル/ディレクトリの権限と所有権の管理

1. ファイルの権限と所有権の概要1. アクセス権Read r: ファイルの内容を表示し、ディレクト...

図を使ってWeb2.0とは何かを説明する

最近はWeb2.0という言葉をよく耳にしますが、Web2.0とは何でしょうか? Web 1.0 とど...

Alibaba Cloud Server Ubuntu 上の Workbench が MySQL に接続できない問題の解決策 (テスト済み)

過去 2 日間、ワークベンチが Alibaba Cloud Server に接続できない問題を解決す...

Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

この記事では主に、Vue を使用してタブ ナビゲーション バーを実装し、flex レイアウトを使用し...

CSS でよく使用されるフォントサイズ、フォント単位、行の高さの詳細な説明

px(ピクセル)ピクセルという言葉は皆さんもよくご存知だと思います。次に、この単位に関するちょっとし...