Vue カプセル化コンポーネント アップロード画像コンポーネント

Vue カプセル化コンポーネント アップロード画像コンポーネント

この記事の例では、参考のためにvueアップロード画像コンポーネントの具体的なコードを共有しています。具体的な内容は次のとおりです。

アップロードされていないステータス

アップロードステータス

その他のステータス(表示/削除)

カスタムコンポーネントファイル名 - ここでは UploadImg.vue と呼ばれます

<テンプレート>
  <div>
    <el-form>
      <!-- :on-change="アップロードファイル" -->
      <el-アップロード
        :limit="limit" //アップロードできる最大数アクション
        accept="image/*" //アップロードを受け入れる:on-change="uploadFile" //ファイルの状態が変わったときの関数list-type="picture-card" //ファイルリストの種類:auto-upload="false" //ファイルを選択したらすぐにアップロードするかどうか:file-list="fileList" //仮想ファイル配列:on-exceed="handleExceed" //ファイル数が制限を超えたときの関数:on-preview="handlePictureCardPreview" //ファイルリストでアップロードしたファイルをクリックしたときの関数:on-remove="handleRemove" //ファイルリストからファイルを削除するときの関数ref="upload"
        クラス="アバターアップローダー"
        :class="{hide:showUpload}" // 最大制限に達した後にアップロード ボタンを非表示にするために使用されます: disabled="disabled" // アップロード失敗プロセスを表示するには>
        <i class="el-icon-plus"></i>
      </el-アップロード>
      //画像を表示 <el-dialog width="30%" :visible.sync="dialogVisible">
        <img width="100%" :src="imgUrl.url" alt />
      </el-ダイアログ>
      // 直接アップロードする必要はないが、ボタンをクリックして画像をアップロードする必要がある場合は、このメソッドを開いてください // 上記の el-upload タグの on-change を http-request メソッドに変更します<!-- <Button text="Upload" type="add_u" style="margin-top: 10px;" @click.native="submitUpload"></Button> -->
    </el-form>
  </div>
</テンプレート>

<スクリプト>
// アップロード画像インターフェースを導入する import { uploadImg } from "@/api/public/api";
エクスポートデフォルト{
  小道具: {
    制限: 数、
    ファイルリスト: 配列、
    無効: ブール値、
  },
  データ() {
    戻る {
      showUpload: false, // 最大制限を制御した後、アップロードボタンを閉じます dialogVisible: false, // 画像のポップアップボックスを表示します imgUrl: [], // 画像をアップロードした後のアドレスの収集};
  },
  //アップロードされた写真の配列をリッスンします (自動レンダリングの問題と、変更時にアップロード ボタンが消える問題に対処するため)。
  時計:
    ファイルリスト(新しい名前、古い名前) {
      newName.length == this.limit の場合、 this.showUpload = true;
      それ以外の場合は this.showUpload = false;
    },
  },
  メソッド: {
    //ファイルリストからファイルを削除する関数 handleRemove(file, fileList) {
      const index = this.fileList.findIndex((item) => item === file.uid);
      this.imgUrl.splice(インデックス、1);
      this.$emit("delUrl", this.imgUrl);
      fileList.length < this.limit の場合、 this.showUpload = false;
    },
    //ファイルリストでアップロードされたファイルをクリックしたときの機能 handlePictureCardPreview(file) {
      this.imgUrl.url = ファイル.url;
      this.dialogVisible = true;
    },
    //これは直接アップロードするのではなく、ボタン経由でアップロードする方法です。submitUpload() {
      this.$refs.upload.submit();
    },
    //ファイルステータスが変化したときの機能(メインロジック機能)
    アップロードファイル(e, ファイルリスト) {
      // アップロード ボタンを非表示にするユーザー アップロードの最大数を判断 if (fileList.length >= this.limit) this.showUpload = true;
      // const file = e.file; <- ここでは直接アップロードする必要はなく、ボタンからアップロードします const file = e.raw; // <- ここでは直接アップロードされます // サイズ const size = file.size / 1024 / 1024 / 2;
      もし (
        !(
          ファイルタイプ === "image/png" ||
          ファイルタイプ === "image/gif" ||
          ファイルタイプ === "image/jpg" ||
          ファイルタイプ === "image/jpeg"
        )
      ){
        this.$notify.warning({
          タイトル: 「警告」、
          メッセージ:
            「image/png、image/gif、image/jpg、image/jpeg の形式で画像をアップロードしてください」
        });
      } そうでない場合 (サイズ > 2) {
        this.$notify.warning({
          タイトル: 「警告」、
          メッセージ:「画像サイズは2M未満でなければなりません」
        });
      } それ以外 {
        if (this.limit == 1) this.imgUrl = []; // 1つと判断する場合は、配列をクリアする必要があります const params = new FormData();
        params.append("ソース", ファイル);
        アップロードImg(params).then((res) => {
        //ここで返されるデータ構造(独自の戻り構造に応じて変更してください)
          (res.data.status === 1)の場合{
            this.$message.success("アップロードに成功しました");
            this.imgUrl = res.data;
            //親コンポーネント メソッドを呼び出して、画像パラメータを渡します。this.$emit("getUrl", this.imgUrl);
          } そうでない場合 this.$message.error("アップロードに失敗しました");
        });
      }
    },
    //ファイル数が制限を超えた場合の関数 handleExceed(files, fileList) {
      this.$message.info(`アップロードできる写真は ${this.limit} 枚のみです`);
    },
  },
};
</スクリプト>

//ここでアップロード前とアップロード後のスタイルを変更します(el-upload は見栄えが良くないので、自分で変更することもできます)
<スタイル スコープ>
.hide .el-upload--picture-card {
  表示: なし !重要;
}
.avatar-uploader > .el-upload {
  幅: 200ピクセル;
  高さ: 200px;
  行の高さ: 200px;
  境界線の半径: 0px;
  背景: #fff;
  境界線: 1px 破線 #ccc;
}
.avatar-uploader > .el-upload > i {
  フォントサイズ: 28px;
  色: #ccc;
}
.avatar-uploader > .el-upload-list {
  表示: ブロック;
}
.avatar-uploader > .el-upload-list > .el-upload-list__item {
  幅: 200ピクセル;
  高さ: 200px;
  表示: ブロック;
}
.avatar-uploader > .el-upload-list > .el-upload-list__item > img {
  幅: 200ピクセル;
  高さ: 200px;
  境界線の半径: 0px;
}
</スタイル>

ページ内での使用 - (ここではよく使うので、グローバルなものを記述します。自分のプロジェクトに合わせて決めてください)

メイン.js

//画像アップロードコンポーネント import UploadImg from "@/views/common/UploadImg.vue";
Vue.component('アップロード画像', アップロード画像)

デモ.vue

<el-form-item label="写真をアップロード">
 //アップロードする画像の最大数を制限します //fileList 画像配列 //getUrl アップロードされたアドレスを取得します //delUrl アップロードされたアドレスを削除します // disabled 処理を無効にします <UploadImg :limit="1" :file-list="fileList" @getUrl="getUrl($event,'Parameters you need to carry')" @delUrl="delUrl($event,'Parameters you need to carry')" :disabled="true" />
</el-form-item>

//変数宣言データ:{
 ファイルリスト:[]
 }
//関数 getUrl(getUrl){
 コンソールログ(getUrl)
 };
delUrl(getUrl){
コンソールログ(getUrl)
};

この記事がお役に立てれば幸いです!!

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

以下もご興味があるかもしれません:
  • Vueはファイルアップロード機能を実装します
  • Vueを使用して写真をアップロードする3つの方法
  • Vue axios でフォームデータを送信する(ファイルのアップロードを含む)
  • モバイル端末上のVue+Vantのアップローダーは、画像のアップロード、圧縮、回転の機能を実現します。
  • Vue+elementUI はフォームと画像のアップロードおよび検証機能の例を実装します
  • vue+elementUIは画像アップロード機能を実現します
  • ファイルアップロード機能を実装するには、vue で input[type="file"] を使用します。
  • Vueの携帯電話カメラと写真アルバムの呼び出しとアップロードの詳細な説明
  • Vue アップロード コンポーネント vue シンプル アップローダーの使用例
  • Vue で Excel ファイルのアップロードとダウンロード機能を実装する 2 つの方法

<<:  Zabbix を使用して Oracle データベースを監視する方法の詳細な説明

>>:  XHTML+CSS Web ページ作成における美しいスタイルシートの適用

推薦する

HTML 特殊文字エンコーディング CSS3 コンテンツに関する簡単な説明:「私は特別なシンボルです」

プロジェクトで使用されている特殊文字とアイコンHTMLコードXML/HTML コードコンテンツをクリ...

MySQL 入門 - 概念

1. それは何ですか? MySQL は最も人気のあるリレーショナル データベース管理システムです。W...

MySQLはSQL文を使用してテーブル名を変更します

MySQL では、SQL ステートメント rename table を使用してテーブル名を変更できま...

JavaScript で矢印関数を使用できないシナリオはどれですか

目次1. オブジェクトメソッドを定義する2. プロトタイプメソッドを定義する3. イベントコールバッ...

MySQL 正規表現 (regexp と rlike) の検索機能の例分析

この記事では、例を使用して MySQL 正規表現 (regexp および rlike) の検索機能を...

mysql5.7.22 ダウンロードプロセス図

1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...

html2canvas を使用して HTML コードを画像に変換する方法

コードを画像に変換するにはhtml2canvas は、ブラウザから Web ページのスクリーンショッ...

Reactでpropsを使用する方法と制限する方法

コンポーネントの props (props はオブジェクトです)機能: コンポーネントに渡されたデー...

MySQLの関連ロックについての簡単な理解

この記事は主にInnoDBのロックに関する知識を素早く理解してもらうことを目的としています。 Roc...

実践的な経験を共有するためのコードチェックツールstylelintの紹介

目次序文文章1. stylelintをインストールする2. 設定ファイル3. stylelintを使...

MySQL データベースでよく使用される SQL ステートメントの詳細と概要

この記事では、MySQL データベースでよく使用される SQL ステートメントを例を使用して説明しま...

Linux で JDK 環境を構成する方法

1. 公式ウェブサイトにアクセスして、jdk-8u162-linux-x64.tar.gzなどのLi...

CentOS6.8 は cmake を使用して MySQL5.7.18 をインストールします。

オンライン情報を参考に、cmakeを使用してCentOS6.8サーバーにMySQL5.7.18をイン...

「MySQL サービスを開始できません エラー 1069」を解決する方法

今日、外出中に同僚から、ウェブサイトのバックエンドにアクセスできないというメッセージが届きました。と...

.Net Core を使用して数千万のデータを MySQL にインポートする手順

目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...