Vue+elementを使用してページ上部のタグを実装する方法の詳細な説明

Vue+elementを使用してページ上部のタグを実装する方法の詳細な説明

ここに画像の説明を挿入

このようなタグはどのように記述すればよいでしょうか?アイデアを要約すると次のようになります。

1. ページレンダリング

ページ 1 は、配列をループすることでストアに配列を格納できることを示しています。 (1) 格納する前に、重複したデータがあるかどうかを判断します。重複したデータがある場合は、最初に削除してから追加します。
(2)重複のない直接プッシュ

 addTag: (状態、タグ) => {
    const { fullPath, path, meta, query } = タグ
    if (tag.path === '/login') {
      偽を返す
    }
    const findIndex = state.tags.findIndex(item => item.path === tag.path)
    console.log(インデックスを検索)
    (検索インデックス >= 0)の場合{
      state.tags.splice(findIndex, 1, { fullPath, パス, メタ, クエリ })
    } それ以外 {
      state.tags.push({ fullPath, パス, メタ, クエリ })
    }
  },

2 このルート追加メソッドがトリガーされ、リスニングルートが入ると、このメソッドが呼び出され、現在の this インスタンスにルートオブジェクトが渡されます。

計算: {
現在のルート() {
      これを返します。$route
    },
},
 時計:
    $ルート: {
      ハンドラ(val) {
        if (val.name) {
          タグを追加します()
        }
      },
      // 深い監視監視 deep: true
    }
  },
  方法:{
  タグを追加します(){
  //this.$store.dispatch は最初にアクションに送信され、ミューテーション内のメソッドを非同期的に処理し、状態の tags 値を変更します。this.$store.dispatch('user/addTag', this.currentRoute)
    },}

この時点で、タグ配列にはすでに値が入っています。デフォルトの色は白なので、ページ上では見えません。次のステップは、選択したタグを強調表示することです。
1要素には設定可能なパラメータがあり、ドキュメントで確認できます。
2 選択されたタグ値が現在のルートで入力されたページと等しいかどうか。一致する場合は true です。

<span v-for="(tag, index) タグ内" :key="index" class="tag-span">
        <elタグ
          :closable="閉じることができる"
          :effect="setTagColor(タグ)"
          @close="タグを閉じる(タグ)"
          @click="toTagRoute(タグ)"
        >
          {{ tag.meta.title }}
        </el-tag>
      </span>
 方法:{
 setTagColor(タグ) {
      this.currentRoute.path === tag.path ? 'dark' : 'plain' を返します
    },
    }

この時点で、タグのレンダリングと選択は完了です。

2. タグを切り替える

方法:{
 toTagRoute(タグ) {
      this.$router.push({
        パス: tag.fullPath || tag.path
      })
    },
}

3. タグを削除する

1 配列であるため、ユーザーがどれを削除したかを判断することはできません。そのため、ユーザーが現在選択しているタグを見つけるには、トラバースする必要があります。次にそれを削除し、ストア内の値を更新します。
2. 現在のタグを削除します。どのタグが強調表示されていますか?これは、配列の最後の要素である、削除されたラベルの前のラベルです。

方法:{
	 閉じるタグ(タグ) {
	      console.log(タグ、4444)
	      this.$store.dispatch('user/delTag', タグ)
	      this.toLastTagRouter(this.$store.state.user.tags)//削除する前のタグを強調表示します
	    },
     toLastTagRouter(タグ) {
      //ここで渡されたタグは削除されるため、splice==》を使用して元の配列を変更することはできません。slice==》は元の配列を変更せず、配列の最後の要素を取得します。const latestView = tags.slice(-1)[0] //タグ配列の最後の要素 console.log(latestView)
      (latestView !== 未定義 && latestView.path !== 未定義)の場合 {
        const { fullPath, meta, path, query } = latestView
        this.$router.push({ fullPath, meta, path, query })
      }
    },
}
//アクション
 delTag({ コミット }, タグ) {
    commit('delTag', タグ)
  },
//突然変異
delTag: (状態、タグ) => {
    //entries() オブジェクトはトラバース可能な配列 [0, {name: a, age: '20'}] になります
    //ForEachとmapもここで使用できます for (const [i, v] of state.tags.entries()) {
      (v.path === tag.path) の場合 {
        状態.タグ.スプライス(i, 1)
        壊す
      }
    }
  },

すべてのタグを削除

方法:{
 すべてのタグを閉じる() {
      // すべてのタグを閉じて、1 つのタグだけを残します。this.$store.dispatch('user/delAllTags')
      const { fullPath, meta, path, query } = this.$store.state.user.tags[0]
      // 残りのタグルートにジャンプします this.$router.push({ fullPath, meta, path, query })
    },
}
//アクション
delAllTags({ コミット }) {
    コミット('delAllTags')
  },
//突然変異
 delAllTags: (状態) => {
    状態タグの連結(1, 状態タグの長さ)
  },

これで、vue+element でページのトップタグを実装する方法についての記事は終了です。vue element トップタグに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue Elementui のタグとページ上の他の要素との相互作用の詳細な説明
  • Vue+elementは、3階層のメニューページを表示する操作を実装するために動的読み込みルーティングを使用します。
  • vuex+axios+element-ui はページリクエストの読み込み操作の例を実装します
  • vue-cli3と要素に基づいたログインページの実装
  • Vue+elementはページ印刷機能を実現する

<<:  MySQLが基礎データ構造としてB+ツリーを使用する理由

>>:  HTMLヘッダータグの使用に関する詳細な説明

推薦する

MySQLはデフォルトのエンジンと文字セットの詳細を変更します

目次1. データベースエンジン1.1 ビューデータベースエンジン1.2 デフォルトのデータベースエン...

MySQL プロジェクトでトランザクション分離レベルを選択する方法

導入コンテンツから始めましょう。誰もが次のような面接のシナリオに遭遇したことがあると思います。インタ...

Dockeにredisをインストールする方法

1. redisイメージを検索する docker 検索 redis 2. Redisイメージをダウン...

Vue プロジェクトのパッケージ化と最適化の実装手順

目次Vueプロジェクトのパッケージ化、起動、最適化Vueプロジェクトのパッケージ化プロジェクトホステ...

LinuxシステムにおけるMySQLの一般的な操作コマンド

仕える: # chkconfig --list すべてのシステムサービスを一覧表示する# chkco...

MySQLとSpringの自動コミットの詳細な説明

1 MySQLの自動コミット設定MySQL はデフォルトで自動的にコミットします。つまり、各 DML...

Linuxでサーバーのハードウェア情報を表示する方法

みなさんこんにちは。今日は12連休ですが、何かお買い物はしましたか?今日は「Linux View S...

データ URI スキームを使用して Web ページに画像を埋め込む方法の紹介

データ URI スキームを使用すると、HTML、CSS、Javascript などで使用できるインラ...

MySQLのパフォーマンスが突然低下する理由

場合によっては、SQL ステートメントが通常どおり、非常に速く実行される状況に遭遇することがあります...

Docker での Redis の永続ストレージの詳細な説明

この章では、dockerの下にあるSpring BootプロジェクトでRedisを操作し始めます。準...

MYSQL トランザクション チュートリアル Yii2.0 マーチャント引き出し機能

序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...

Vue3 スロットの使用状況の概要

目次1. Vスロットの紹介2. 匿名スロット3. 名前付きスロット4. スコープ付きスロット5. 動...

HTMLの空リンクの役割についての簡単な説明

空のリンク:つまり、ターゲット エンドポイントとのリンクはありません。フォーマット <a hr...

MySQL トランザクションの概念と使用法の詳細な説明

目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...

Vue でシンプルな無限ループスクロールアニメーションを実装する例

この記事では主に、Vue でシンプルな無限ループスクロールアニメーションを実装し、みんなで共有する例...