[英]Laravel Vue.js - how to use blade suntax in axios URL
在我的 Laravel + Vue.js SPA(單頁應用程序)中,我使用axios
作為 HTTP 客戶端來發出POST
請求。 在 Vue 組件即Register.vue
,我有:
axios.post('@{{ route("register") }}',
this.name, // the data to post
{ headers: {
'Content-type': 'application/json',
}
})
.then(response => {
this.result = response.data.bpi
})
.catch(error => {
console.log(error)
this.errored = true
});
但是 Firfox 瀏覽器控制台在發出請求時顯示 404 錯誤並且axios
嘗試發出請求的 URL 顯示為http://127.0.0.1:8000/@%7B%7B%20route(%22register%22)%20%7D%7D
來自網絡選項卡。
如何在axios
ajax 請求中使用route('register')
作為 URL?
編輯:
如果您想知道應用程序的架構,我將嘗試在下面詳細說明:
app.js
文件有:
window.axios = require('axios');
import router from './router';
import App from '../components/App.vue';
var app = new Vue({
el: '#app',
render: h => h(App),
router,
mount(){
console.log("Root instance mounted ");
}
});
router.js
文件有:
import Register from '../components/Register.vue';
export default new VueRouter({
mode: 'history',
routes: [
{ path: '/register', component: Register, name: 'register' }
],
web.php
有:
Auth::routes();// it contains login, register etc routes
我的App.vue
有:
<template>
<div>
<div id="toolbar">
My Toolbar
</div>
<router-view></router-view>
</div>
</template>
因此,當/register
URL被命中, app.js
負載App.vue
並根據路徑規范router.js
, Register
在組分Register.vue
中的地方呈現<register-view></register-view>
在App.vue
文件中。 Register.vue
相關的axios
ajax部分之前已經給出。
編輯2:
在RegisterController
內部,我轉到use RegistersUsers
trait 思想 IDE 導航並進行了以下更改:
public function showRegistrationForm()
{
//return view('auth.register'); //discarded this line
return view('app');
}
在assets/views/app.blade.php
,我有:
<body>
<div id="app"></div>
<script src="{{ asset('js/app.js') }}"></script>
</body>
不幸的是,您不能在 Vue 中使用刀片語法,除非您直接在刀片模板中編寫 Vue 代碼,這不是最佳實踐。 我發現有幫助的一件事是在谷歌文檔中寫出我所有的 Laravel API 路由,以便在 Vue 中引用它們時更容易引用它們。 我希望這有幫助!
如果沒有.blade
文件,就無法做到這一點。 不支持 vue 組件動態使用 laravel 路由。 但是你可以使用一些第三方包來實現像Ziggy
這樣的東西
如果您在.blade
文件中,則只能使用刀片語法。
調用 API 時必須靜態設置此路由或其他路由
不推薦:或者您可以在“主”刀片文件中定義一個 js 變量,然后在Register.vue
文件中使用該變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.