【发布时间】:2019-02-04 06:55:04
【问题描述】:
我能够使用 Pusher 配置 Laravel Echo 并安装所有必要的依赖项。我有关于 lynda 和 laracast 如何做到这一点的观看教程,但它们很旧,并且不适用于这个问题标题中的这些版本。所以,从我迄今为止从 lynda 和 laracast 那里学到的东西,我必须从刀片模板运行 Vue,但除非我在刀片引擎中手动添加这行代码 <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>,否则我无法完成这项工作。我确信这不是事情必须工作的方式,因为我通过在刀片模板中添加这行代码来获得两个 vue 实例。如果我以这种方式在刀片模板中使用它,我将无法使其工作,因为我得到了Vue is not defined:
let app = new Vue({
el: '#app',
data() {
return {
...
}
},
)}
所以,即使我运行两个 Vue 实例,我也无法让 laravel Echo 从 Blade 工作,因为当我使用它时,我得到了 Echo is not defined,例如使用以下代码:
Echo.join('form.' + '{{ $product->id }}')
.here((users) => {
this.count = users.length;
});
我也尝试过像这样使用window:
window.Echo.join('form.' + '{{ $product->id }}')
.here((users) => {
this.count = users.length;
});
但是这样我就得到了Cannot read property 'join' of undefined"
所以基本上我迷失了试图弄清楚如何以正确的方式在刀片中使用 vue + laravel echo 和 pusher js。
更新
这是我的 app.js 文件:
require('./bootstrap');
window.Vue = require('vue');
Vue.component('search-component', require('./components/Search.vue'));
这是我的 boostrap.js 文件:
window._ = require('lodash');
window.Popper = require('popper.js').default;
try {
window.$ = window.jQuery = require('jquery');
require('bootstrap');
} catch (e) {}
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
【问题讨论】:
-
我们需要更多信息来帮助您。你的前端构建设置是什么?你在使用laravel mix吗?发布您的混合配置和包含 Vue 实例化的主 js 文件。如果您使用的是 mix,则必须通过 npm install 安装 echo 和 vue 等依赖项,然后在您的 main.js 或您调用的任何内容中导入/要求它们。这样你就可以使用它了。我看不出有任何理由将 Vue 的脚本包含到您的刀片中。使用 mix 的默认设置不需要这个。
-
@FrankProvost,我在所有课程上看到人们在刀片模板中使用 laravel echo 和 vue vue 只是将其写入刀片模板中而不是为此创建单独的组件不是正确的方法 + 我在刀片模板中有一些我想使用的逻辑,我不能用 vue 组件来做,我正在做的事情走错路了?
-
@FrankProvost,是的,我正在使用 laravel mix,主要是我使用
npm run watch的官方文档编译我的 js 和 css 文件
标签: php laravel vue.js pusher laravel-echo