laravel 5.8 and Vue "TypeError: Cannot read property 'open' of undefined"
laravel 5.8 and Vue "TypeError: Cannot read property 'open' of undefined"
在我的 laravel 项目中,我使用了一个名为 LaraToaster 的包
LaraToaster
我按照包裹的要求去做
LaraToaster.vue
<template>
<div></div>
</template>
<script>
export default {
props: ['message','type'],
mounted() {
this.$toast.open({
message: this.message,
type: this.type,
duration: 2000,
queue: true,
})
}
}
</script>
app.js
require('./bootstrap');
window.Vue = require('vue');
import Vue from 'vue'
import Buefy from 'buefy'
Vue.use(Buefy)
Vue.component('laratoaster', require('./components/LaraToaster.vue').default);
const app = new Vue({
el: '#app',
});
ContactController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Toaster;
use App\Mail\ContactMail;
class ContactController extends Controller
{
public function create()
{
return view('contact.create');
}
public function store()
{
$data = request()->validate([
'name' => 'required',
'email' => 'required|email',
'message' => 'required|min:3',
]);
Mail::to('test@test.com')->send(new ContactMail($data));
Toaster::success("Your Message has been sent.");
return redirect('contact');
}
}
app.blade.php
<!DOCTYPE html>
<html class="overflow-auto" lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
// head content
</head>
<body>
<div id="app">
<main class="py-4">
<div class="container">
@yield('content')
</div>
</main>
</div>
</body>
</html>
create.blade.php
@extends('layouts.app')
@section('content')
@section('head', 'Contact Us')
<div class="columns">
<div class="column is-three-fifths is-offset-one-fifth">
{!! Toaster::toast() !!}
</div>
</div>
@endsection
组件已注册,但出现错误
[Vue warn]: Error in mounted hook: "TypeError: Cannot read property
'open' of undefined"
found in
---> at resources/js/components/LaraToaster.vue
Buefy 最近更改了它的 API 以将所有内容都放在 $buefy
命名空间中。参见:
https://github.com/buefy/buefy/commit/5ba5094ed846608ae32bbadba5e79c01c4650f70
从 0.8.0 开始你需要使用:
this.$buefy.toast.open
我没有使用过 LaraToaster,但从快速浏览代码来看,这似乎足以修复它。如果您仍然有兼容性问题,您可能想使用以前版本的 Buefy,直到 LaraToaster 更新。
在我的 laravel 项目中,我使用了一个名为 LaraToaster 的包 LaraToaster
我按照包裹的要求去做
LaraToaster.vue
<template>
<div></div>
</template>
<script>
export default {
props: ['message','type'],
mounted() {
this.$toast.open({
message: this.message,
type: this.type,
duration: 2000,
queue: true,
})
}
}
</script>
app.js
require('./bootstrap');
window.Vue = require('vue');
import Vue from 'vue'
import Buefy from 'buefy'
Vue.use(Buefy)
Vue.component('laratoaster', require('./components/LaraToaster.vue').default);
const app = new Vue({
el: '#app',
});
ContactController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Toaster;
use App\Mail\ContactMail;
class ContactController extends Controller
{
public function create()
{
return view('contact.create');
}
public function store()
{
$data = request()->validate([
'name' => 'required',
'email' => 'required|email',
'message' => 'required|min:3',
]);
Mail::to('test@test.com')->send(new ContactMail($data));
Toaster::success("Your Message has been sent.");
return redirect('contact');
}
}
app.blade.php
<!DOCTYPE html>
<html class="overflow-auto" lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
// head content
</head>
<body>
<div id="app">
<main class="py-4">
<div class="container">
@yield('content')
</div>
</main>
</div>
</body>
</html>
create.blade.php
@extends('layouts.app')
@section('content')
@section('head', 'Contact Us')
<div class="columns">
<div class="column is-three-fifths is-offset-one-fifth">
{!! Toaster::toast() !!}
</div>
</div>
@endsection
组件已注册,但出现错误
[Vue warn]: Error in mounted hook: "TypeError: Cannot read property 'open' of undefined"
found in
---> at resources/js/components/LaraToaster.vue
Buefy 最近更改了它的 API 以将所有内容都放在 $buefy
命名空间中。参见:
https://github.com/buefy/buefy/commit/5ba5094ed846608ae32bbadba5e79c01c4650f70
从 0.8.0 开始你需要使用:
this.$buefy.toast.open
我没有使用过 LaraToaster,但从快速浏览代码来看,这似乎足以修复它。如果您仍然有兼容性问题,您可能想使用以前版本的 Buefy,直到 LaraToaster 更新。