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ヘッダータグの使用に関する詳細な説明

推薦する

CSS3 @mediaの基本的な使い方のまとめ

//文法: @media mediatype and | not | only (メディア機能) ...

mysql のファイル mysql-bin.000001 とは何ですか? 削除できますか?

ポートを使用して MySQL をインストールした後、しばらくすると /var の容量が不足しているこ...

静的ウェブサイトをRSSに変換するツール

<br /> この記事は allwebdesignresources.com から Ra...

Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...

1 分で Nginx のバージョンをスムーズにアップグレードおよびロールバックする方法

今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...

sed コマンドを使用してファイルの特定の行を効率的に削除する方法

序文通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これら...

CSS でテキストカラーグラデーションを実装する 3 つの方法

Web フロントエンド開発のプロセスでは、UI デザイナーはグラデーション テキストを使用したデザイ...

JavaScript でプロパティハイジャックを実装する方法 defineProperty

目次序文記述子getとsetの詳細な説明オブジェクトの属性の乗っ取りオブジェクトのすべてのプロパティ...

HTMLノードの追加と削除の簡単な例

HTML ノードの追加と削除の簡単な例 HTML ノードの追加と削除の簡単な例<input t...

CSS3 で @media を使用して Web ページの適応を実現するためのサンプル コード

現在、コンピュータモニターの画面解像度はますます高くなる傾向にありますが、携帯電話などのモバイルデバ...

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

MySQL でサーバーのインストールを開始できない場合の解決策について簡単に説明します。

コンピュータに初めて MySQL をインストールする場合、通常このエラー メッセージは表示されません...

Linux ネットワークプログラミングにおけるソケットオプションの実装

ソケットオプション機能機能: ソケットファイル記述子の属性の読み取りと設定に使用されるメソッド #i...

MySQLデータベースのQPSとTPSの意味と計算方法

DB ベンチマーク テストを実行する場合、qps と tps はデータベースのパフォーマンスを測定す...

UTF-8 ファイルの Unicode 署名 BOM (バイト オーダー マーク) の問題

最近、UTF8 エンコードの中国語 Zen Cart Web サイトをデバッグしているときに奇妙な現...