laravelにvueのコンポーネントを入れています。vueのコンポーネントでは画像プレビューの処理をしていて、画像が選択された後、画像をリセットするためのボタンを用意しています。しかし、laravelのformの中にvueのコンポーネントが存在するため、画像リセットボタンを押すとlaravel側のrequestが送られてしまいます。画像リセットボタン,laravelのformリクエスト、それぞれ別々に処理をしたいのですが何かいい方法はありますでしょうか。
profile.blade.php
<form method="POST" action="{{route('buyers.update', ['id' =>Auth::guard('buyers')->user()]) }}"enctype="multipart/form-data" > @csrf <ul class=""> @error('buyer_name') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror <li class="p-form--item"> <input id="buyer_name" type="buyer_name" class="c-text @error('buyer_name') is-invalid @enderror" name="buyer_name" value="{{ $buyer_info->buyer_name?? old('buyer_name') }}" required autocomplete="buyer_name" placeholder="ユーザー名" > </li> @error('img') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror ++++<Img-Item></Img-Item>++++++ </ul> <div class="submit-btn"> <input name="submit" type="submit" value="変更する" class="p-btn--submit c-btn"> </div> </form>
ImgItem.vue
<template> <div> <li class="p-form--item__file"> <span>画像{{ userId }}</span> <input type="file" placeholder="画像" class="c-file" name="img" value="" ref="file" @change="onFileChange($event)"> <img :src="imageData" v-if="imageData" class="img-preview"> </li> <button @click="resetFile()" class="btn btn-close" name="img-reset" > 画像を編集する </button> </div> </template> <script> const axios = require('axios'); export default { props: { Id: { type: Number, default:0, }, }, data() { return { imageData:'', Id : this.Id, img: [] } }, methods: { //------------------------------ //画像リセット //------------------------------ getImg() { var url = 'user/ajax/img/{id}/'+ this.imgId; axios.get(url) .then(response =>{ console.log(response.data); this.img = response.data; }) .catch(error => console.log(error)) }, //------------------------------ ////画像を読み込み //------------------------------ onFileChange(e) {//引数eでイベントに結果を投げる const files = e.target.files; if(files.length > 0) {//画像が選択されたかをチェック var self = this; var file = files[0]; var reader = new FileReader();//文字ファイルを読み込む reader.onload = function(e) { self.imageData = e.target.result; }; reader.readAsDataURL(file);//画像を読み込み } } }, //------------------------------ //画像リセット //------------------------------ resetFile() { const input = this.$refs.file; input.type = 'text'; input.type = 'file'; this.imageData = ''; }, } </script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/22 01:28
2020/07/22 01:40
2020/07/22 02:16