如何在 Laravel 中自定义 vue-filemanager 前端?
How to customize vue-filemanager frontend in Laravel?
我正在使用包 https://github.com/alexusmai/laravel-file-manager which comes with either a pre-compiled js file or you may use the vue-component directly through npm from https://github.com/alexusmai/vue-laravel-file-manager。
但是,在这两种变体中,前端都是不可修改的。
我在我的应用程序中使用 Laravel 文件管理器,我想对 vue 文件进行自定义以更改前端。
到目前为止我尝试了什么:
- 已将 https://github.com/alexusmai/vue-laravel-file-manager/tree/master/src 的内容复制到
/resources/assets/js/file-manager
然后我创建了一个 file_manager.js
这样的:
import Vue from 'vue';
import Vuex from 'vuex';
import FileManager from './file-manager/FileManager.vue';
Vue.use(Vuex);
// create Vuex store, if you don't have it
const store = new Vuex.Store();
Vue.use(FileManager, {store});
Vue.component('file-manager', FileManager);
const app = new Vue({
store
el: '#app'
});
并且在我的 webpack.mix.js 文件中添加了这一行:
.js('resources/assets/js/file-manager.js', 'public/js')
现在 npm run dev
有效,但如果我打开包含以下内容的页面:
<div style="height: 600px;">
<div id="app">
<file-manager></file-manager>
</div>
</div>
<script src="{{ asset('js/file-manager.js') }}"></script>
我收到这个错误:
[vuex] unknown mutation type: fm/settings/manualSettings
[vuex] unknown mutation type: fm/settings/initAxiosSettings
[vuex] unknown action type: fm/initializeApp
为什么会这样?我需要以不同的方式包含它吗?
您需要导入并注册商店模块:
import Vue from 'vue';
import Vuex from 'vuex';
import FileManager from './file-manager/FileManager.vue';
import fm from './file-manager/store'; // Import modules
Vue.use(Vuex);
// create Vuex store, if you don't have it
const store = new Vuex.Store({modules: {fm}}); // Register modules
Vue.use(FileManager, {store});
Vue.component('file-manager', FileManager);
const app = new Vue({
store,
el: '#app'
});
说明
file-manager
组件期望全局存储中存在大量操作和变更。在典型的用法中,比如通过 npm
模块,这些操作和变更在 this entrypoint file are registered on the store here 中定义,如自述文件中所述。由于您尝试手动注册 file-manager
组件而不是通过入口点文件注册它,因此您还需要显式注册该模块。
是的,作为替代解决方案,您可以改为从入口点文件 init.js 导入并将其用作插件,以便它隐式注册模块和组件:
import Vue from 'vue';
import Vuex from 'vuex';
import FileManager from './file-manager/init'; // Note 'init'
Vue.use(Vuex);
// create Vuex store, if you don't have it
const store = new Vuex.Store();
Vue.use(FileManager, {store}); // Registers the file-manager component too
const app = new Vue({
store,
el: '#app'
});
我正在使用包 https://github.com/alexusmai/laravel-file-manager which comes with either a pre-compiled js file or you may use the vue-component directly through npm from https://github.com/alexusmai/vue-laravel-file-manager。
但是,在这两种变体中,前端都是不可修改的。 我在我的应用程序中使用 Laravel 文件管理器,我想对 vue 文件进行自定义以更改前端。
到目前为止我尝试了什么:
- 已将 https://github.com/alexusmai/vue-laravel-file-manager/tree/master/src 的内容复制到
/resources/assets/js/file-manager
然后我创建了一个 file_manager.js
这样的:
import Vue from 'vue';
import Vuex from 'vuex';
import FileManager from './file-manager/FileManager.vue';
Vue.use(Vuex);
// create Vuex store, if you don't have it
const store = new Vuex.Store();
Vue.use(FileManager, {store});
Vue.component('file-manager', FileManager);
const app = new Vue({
store
el: '#app'
});
并且在我的 webpack.mix.js 文件中添加了这一行:
.js('resources/assets/js/file-manager.js', 'public/js')
现在 npm run dev
有效,但如果我打开包含以下内容的页面:
<div style="height: 600px;">
<div id="app">
<file-manager></file-manager>
</div>
</div>
<script src="{{ asset('js/file-manager.js') }}"></script>
我收到这个错误:
[vuex] unknown mutation type: fm/settings/manualSettings [vuex] unknown mutation type: fm/settings/initAxiosSettings [vuex] unknown action type: fm/initializeApp
为什么会这样?我需要以不同的方式包含它吗?
您需要导入并注册商店模块:
import Vue from 'vue';
import Vuex from 'vuex';
import FileManager from './file-manager/FileManager.vue';
import fm from './file-manager/store'; // Import modules
Vue.use(Vuex);
// create Vuex store, if you don't have it
const store = new Vuex.Store({modules: {fm}}); // Register modules
Vue.use(FileManager, {store});
Vue.component('file-manager', FileManager);
const app = new Vue({
store,
el: '#app'
});
说明
file-manager
组件期望全局存储中存在大量操作和变更。在典型的用法中,比如通过 npm
模块,这些操作和变更在 this entrypoint file are registered on the store here 中定义,如自述文件中所述。由于您尝试手动注册 file-manager
组件而不是通过入口点文件注册它,因此您还需要显式注册该模块。
是的,作为替代解决方案,您可以改为从入口点文件 init.js 导入并将其用作插件,以便它隐式注册模块和组件:
import Vue from 'vue';
import Vuex from 'vuex';
import FileManager from './file-manager/init'; // Note 'init'
Vue.use(Vuex);
// create Vuex store, if you don't have it
const store = new Vuex.Store();
Vue.use(FileManager, {store}); // Registers the file-manager component too
const app = new Vue({
store,
el: '#app'
});