Laravel VueJS 模板中的外观?

Laravel Facades in VueJS Template?

我刚刚使用此命令 php artisan storage:link 创建了一个符号 link 以便能够从 Web 访问我的文件。我从 Laravel 的官方文档中了解到这一点:https://laravel.com/docs/5.3/filesystem#configuration.

所以我在 blade 模板中使用 <img src="{{ Storage::url($user->avatar) }}"> 来获取图像的路径。

我的问题是,如何使用 VueJS 模板实现类似的方法? 我在 .vue 文件中尝试了 <img src="{{ Storage::url($user->avatar) }}">,但在 运行 gulp watch 时出现错误。该错误会引发无效表达式。简单意味着我不能在 .vue 文件中使用 Laravel's Facades?

那么获取图像正确路径的最佳方法是什么?使用 $avatar = Storage::url($user->avatar); 并在将其放入 .vue 文件之前将其注入数组?

供参考,这是我的:

VueJS 文件

<template>
    <div class="row">
        <div class="col-md-4" v-for="person in people">
            <div class="panel panel-default">
                <div class="panel-heading text-center">
                    {{ person.name }}
                </div>
                <div class="panel-body">
                    <img :src="person.avatar" class="img-responsive">
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        mounted() {
            this.$http.get('/people/')
            .then((res) => {
                console.log(res)
                this.people = res.body.people
            })
        },
        data() {
            return {
                people: '',
            }
        }
    }
</script>

路线

Route::group(['prefix' => 'people', 'middleware' => ['auth']], function () {
    Route::get('/', [
        'uses' => 'PeopleController@index',
        'as' => 'people',
    ]);
});

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class PeopleController extends Controller
{
    public function index () {
        $people = User::all();
        return response()->json(['people' => $people]);
    }
}

为什么不在用户模型中设置存储路径。 在您的模型中创建一个 avatar_url 属性。

use Illuminate\Support\Facades\Storage;

class User extends Model {

    protected $appends = ['avatar_url'];

    ....

    public function getAvatarUrlAttribute() {
        return Storage::url($this->avatar);
    }

    ...

}

然后在你的 VueJS 文件中...

<img :src="person.avatar_url" class="img-responsive">