2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vue.jsのtemplateの中でURLとかの文字列をフィルターで置き換えする方法

Last updated at Posted at 2019-12-22

タイトルからすごく直感的に分かりづらいタイトル!

【本記事の目的】

vue.jsの中で、文字列の中の一部をフィルターで変更したい!
(phpでいうところのstr_replace)

【前置き】(長いので飛ばしてもokです)

laravelでは画像データを投稿すると、デフォルトでpublicに保管されます。
それを実際に表示させるには画像をシンボリックリンクでstorage側で表示させる事を推奨されています。
参考:https://qiita.com/koru1893/items/1d2f522e20744b03e3ad

でもそれをlaravel経由のvue.jsで表示させようとするとうまくいかず。
vue.jsの中でimgタグの参照urlをpublic→storage に置き換える
という作業にハマったのでメモです。

**publicだと読み込めず、storageだと読み込める状態です。
Sky_Light_Lover.png

なお、php(view)でそのデータを読み込むだけなら
str_replaceで画像のurlを変数にして置き換えて、imgタグの読み込み先として指定すれば行けます。

//$image_urlがdbから持ってきたurl情報。urlの一部を置き換えるということ。
$image_url = str_replace('public/', 'storage/', $image_url);

phpのview内でやる方法で完了しているじゃん!て思うんですが、
vue.jsとか使って非同期でdb上のURL文字列を取ってくる場合、img参照用のURLをjsファイル内で(今回の場合vue.jsん中で)差し替える必要があります。


やっと本題

カスタムフィルタを作りました!
(※vue.jsのフィルタ機能は今は自作しないとダメぽい。vue.1系はフィルタのメソッドあったぽいです。なんで削除されたんだろう?)

filtersの中に、
「public」という文字列を「..storage」に置き換える
「replace」という処理を作りました。
(置き換え前、置き換え先のコードはもちろん任意です。)

vue.js
<script>
    export default {
        props:['hoge'],
        data:function(){
            return{
             
            }
        },
        mounted(){
          
        },
        filters:{ //カスタムフィルタ。こんな感じ!
            replace:function(val){
                return val.replace("public", "../storage");   
            }
        },
       }
    }
</script>


replaceのフィルタは準備できました。
あとはtemplateの中で、フィルタします!
(※vue.jsの中では {{ フィルタしたいデータ|フィルタの処理名 }} という書き方でフィルタリングできます。マスタッシュ!)

vue.js
<template>

<img :src="image_url | replace('public','../storage')" alt="">

</template>

これで、urlのなかの一部を置き換えられます。
公開サイト側でソースをみると、下記のようになります。

フィルタなしの結果

<img src="public/post_images/hoge.jpg">

フィルタありの結果

<img src="../storage/post_images/hoge.jpg">

これできちんと画像が公開サイトで読み込めました。やった!

参考:https://www.itsolutionstuff.com/post/how-to-replace-string-in-vue-jsexample.html

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?