質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

1149閲覧

vue.js+laravel5.8で商品変更画面の写真のsrcを変えるには

neginattofan

総合スコア66

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/05/14 02:36

新しく商品を作るときの画像アップロードは、 toggle: 'true' を渡して、
商品編集の際には toggle: 'false'を渡して、
二つあるimgタグのどちらかを表示させるようにしました。

問題なのは商品変更の際に、データベースに保存されたsrcは /storage/ * pic で表示できますが、
その編集画面の時に、新しく写真を追加されるとどうすればいいのか分かりません。

動的にimgタグを表示、日表示する必要があるのでしょうか?
vueに初めて触るので良い方法が分かりません。

よろしくお願いします。

template

1 <input type="file" ref="file" @change="setImage" class="input" name="pic1"/> 2 <img :src="data.image" class="img" v-show="toggle == 'false'"> 3 <img :src="/storage/ + pic" class="img" v-show="toggle == 'true'"> 4 </div>

javascript

1<script> 2export default { 3 props: [ 4 'pic', 5 'toggle' 6 ], 7 data() { 8 return { 9 data: { 10 image: "", 11 name: "", 12 } 13 }; 14 }, 15 methods: { 16 setImage(e) { 17 const files = this.$refs.file; 18 const fileImg = files.files[0]; 19 if (fileImg.type.startsWith("image/")) { 20 this.data.image = window.URL.createObjectURL(fileImg); 21 this.data.name = fileImg.name; 22 this.data.type = fileImg.type; 23 } 24 }, 25 26 } 27}; 28</script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

javascriptからsrcを入れることで解決しました。

<template> <div class="c-product__item" > <div class="c-product__info"><div class="c-product__name">画像</div><div class="c-product__warning">必須</div></div> <div class="img-container"> <input type="file" ref="file" @change="setImage" class="input" name="pic1"/> <img :src="/storage/ + pic" class="img"> </div> </div> </template> <script> export default { props: [ 'pic', ], data() { return { data: { image: "", name: "", } }; }, methods: { setImage(e) { const files = this.$refs.file; const fileImg = files.files[0]; const preview = document.querySelector('img'); if (fileImg.type.startsWith("image/")) { this.data.image = window.URL.createObjectURL(fileImg); this.data.name = fileImg.name; this.data.type = fileImg.type; console.log(this.data.image); console.log(this.data.name); console.log(this.data.type); preview.src = this.data.image; } }, } }; </script> <style scoped> .img-container { width: 300px; height: 300px; position: relative; } .input { position: absolute; opacity: 0; height: 100%; width: 100%; } .img { width: 300px; height: 300px; background: #f2f2f2; object-fit: cover; } </style>

投稿2020/05/14 04:04

neginattofan

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問