Vueは州、都市、地区のカスケード選択を実現します

Vueは州、都市、地区のカスケード選択を実現します

最近、省、市、地区のカスケード選択効果を実装する必要があります。省、市、地区のデータはすべてローカルデータを使用しており、実装のロジックは少し複雑です。ここでPC側の概要をリストして共有します。モバイル側のコードも同様です。HTMLを除いて、残りは必要に応じてコピーして使用できます。これが皆さんのお役に立てば幸いです。

1. レンダリング

PCの副作用の写真:

モバイル端末効果図:

2. 実装ロジック

ここでの私の実装ロジックは、まず州を通じて都市を取得し、次に都市を通じて地区と郡を取得することです。通りは固定されていないため、ユーザーが自分で入力できるようにします。対応する都市エリアを取得するロジックは次のとおりです。各省、市、区、郡には固有のコードがあり、省コードの最初の 2 桁は市と同じであるため、市はインターセプションによって除外できます。また、市コードの最初の 4 桁は区と郡と同じであるため、区と郡もインターセプションによって除外できます。

PC 側の実装には element-ui フレームワークの select コンポーネントを使用したため、州、市、地区のデータ構造は次のようになります。

モバイル端末は、vantフレームワークのvan-pickerコンポーネントを使用して実装されています。データ構造はPC端末とは異なり、省、市、地区のデータ構造は次のようになります。

3. 関連コード

<!--PC コード-->
 <el-form :inline="true" :model="addressForm">
        <el-form-item label="省" label-width="100px" prop="province">
          <el-select v-model="addressForm.province" placeholder="選択してください" style="width:250px" @change="bindProvinceChange">
          <!-- :value="item.value+'|'+item.label" 番号と州名の両方を取得したい場合は、値の割り当てを次のように記述し、| で切り取ります。両方を取得する必要がない場合は、片方だけ割り当てます。 -->
            <el-option v-for="provinceList 内の項目" :label="item.label" :value="item.value+'|'+item.label"></el-option>
          </el-select>
        </el-form-item>
        <br />
        <el-form-item label="市" label-width="100px" prop="city">
          <el-select v-model="addressForm.city" placeholder="選択してください" style="width:250px" @change="bindCityChange">
            <el-option v-for="cityList 内の項目" :label="item.label" :value="item.value+'|'+item.label"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="地区/郡" label-width="100px" prop="郡">
          <el-select v-model="addressForm.county" placeholder="選択してください" style="width:250px" @change="bindCountyChange">
            <el-option v-for="countyList 内の項目" :label="item.label" :value="item.value+'|'+item.label"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="通り/町名" label-width="100px" prop="通り">
          <el-input type="textarea" :rows="3" resize="none" placeholder="住所情報を入力してください" v-model="addressForm.street"
            スタイル="幅:250px">
          </el-input>
        </el-form-item>
</el-form>

このセクションのコードは基本的に同じです。唯一の違いは、モバイル端末の onchange イベントで一意の番号を直接取得でき、PC 側のようにカットする必要がないことです。必要に応じて変更できます。

var アプリ = 新しい Vue({
      el: '#app',
       データ: {
    アドレスフォーム: {
           州: ''、
           市: ''、
           郡: ''、
           通り: ''
         },
         // 州、都市、地区のデータは別のファイルに配置されます。私は別のファイルから ProvinceList を直接インポートしています: areaList.provinceList、
         都市リスト: [],
         郡リスト: []
  },
  方法:{
   // 州 bindProvinceChange(vals) {
         // 州に対応する一意の番号を取得します console.log('data========>', vals)
           arr = vals.split('|') とします。
           this.addressForm.province = arr[1]
           this.addressForm.city = '';
           this.addressForm.county = '';
           this.addressForm.street = '';
           // 対応する都市を取得します。this.cityList = this.addrInit(2, areaList.cityList, arr[0]);
         },
         // 都市bindCityChange(vals) {
           console.log('vals------->', vals)
           this.addressForm.county = '';
           this.addressForm.street = '';
           arr = vals.split('|') とします。
           this.addressForm.city = arr[1]
            // 対応する地区と郡を取得します。 this.countyList = this.addrInit(4, areaList.countyList, arr[0]);
         },
         //地区と郡 bindCountyChange(vals) {
           console.log('vals------======>', vals)
           this.addressForm.street = '';
           arr = vals.split('|') とします。
           this.addressForm.county = arr[1]
         },
         // オブジェクトを配列に変換する transArray(obj) {
           arr = [] とします。
           for (let i in obj) {
             arr.push(obj[i]);
           }
           arr を返します。
         },
         /**
          * カプセル化方法 - 対応する州、都市、地区を取得します* @param {number} num インターセプトする桁数* @param {*} list クエリする配列* @param {*} str インターセプトする文字列* @returns
          */
         addrInit(数値、リスト、文字列) {
           strSub = str.substr(0, num);とします。
           arr = this.transArray(リスト) とします。
           newArr = arr.filter(function (val, index, arr) {
             newStr = val.value.substr(0, num); とします。
             newStr == strSub を返します。
           });
           newArr を返します。
         },
  }
 })

これが皆さんのお役に立てば幸いです! !

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue+ElementUI に基づいて州、市、地区の住所を選択するための一般的なコンポーネント
  • Vue はモバイル端末の州、都市、地区の選択を実装します
  • Vue は携帯電話で州、都市、地区の選択を実装します
  • Vue.jsは京東の省、市、地区の3階層リンクの選択コンポーネントサンプルコードを模倣します
  • Vue の州、都市、地区の 3 リンク ドロップダウン選択コンポーネントの実装

<<:  要素の高さを下から上へ、上から下へ制御する CSS メソッド

>>:  Docker+nextcloudで個人用クラウドストレージシステムを構築

推薦する

CSS を使用して HTML フォーム コントロールを美しくする詳細な例 (フォームの美化)

1. HTML送信ボタンと下部ボタンの基本構文構造1. HTML送信ボタン入力タグで type=&...

Ajax の JavaScript ソリューションにおける parsererror エラー ケースの詳細な説明

ajax の parsererror エラー (バックグラウンドからフロントエンドに送信される js...

MySQL 5.7.24 のインストールと設定方法のグラフィックチュートリアル

MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーションに...

Linux サーバーに Python3 をインストールする 2 つの方法

最初の方法Alibaba Cloud および Baidu Cloud サーバーが利用可能です。 ! ...

Vmware での Ubuntu サーバーのインストール チュートリアル

この記事では、Ubuntuサーバーバージョンのインストールグラフィックチュートリアルを参考までに紹介...

HTML の相対パスと絶対パスの違いの分析

HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...

Expressはログイン認証を実装

この記事では、ログイン認証を実装するためのExpressの具体的なコードを例として紹介します。具体的...

Baota Linux パネル コマンド リスト

目次Pagodaをインストールする管理塔Nginx サービス管理Apache サービス管理MySQL...

Vue を通じて QR コードスキャン機能を実装する

ヒントこのプラグインは https プロトコルでのみアクセスできます。http プロトコルはうまく機...

Windows DNS サーバーに「ワームレベル」の脆弱性が露呈、17 年間存在

脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...

DockerはRedis5.0をビルドし、データをマウントします

目次1. 永続データの簡単なマウント2. DockerFileでイメージをビルドし、設定ファイルを指...

Linux システムでの Selenium クローラー プログラムの導入の概要

目次序文1. セレンとは何ですか? 2. 使用手順1. ライブラリをインポートする2. テストコード...

Reactでパスワード強度検出器を実装する方法

目次序文使用コンポーネントの記述データ構造分析プロセス分析基礎コードの分析他の要約する序文パスワード...

MySQL Index Pushdown (ICP) とは何かを理解するための記事

目次1. はじめに2. 原則III. 実践3.1 インデックスプッシュダウンを使用しない3.2 イン...