由于 Laravel-admin
采用的是 pjax 的方式刷新页面,意味着很多页面刷新的操作,并不是刷新整个 document,而是从服务器拿到部分 document,再通过类似 $(“#pjax-container”).html(newPart)
的方式更新的。
这就造成一个问题,每次 pjax 刷新,都会破坏 vue 的 dom 映射。
所以理论上有2种方法解决:
重新绑定一下 vue 的映射关系
在某些页面禁止 pjax
1 太难搞,而且没啥资料,放弃。2 的话比较可行。
部分禁止 pjax
打开 public/vendor/laravel-admin/laravel-admin/laravel-admin.js
添加代码:
// 不使用 pjax 刷新的页面 $(document).on('pjax:beforeReplace', function (e, options) { // console.log(arguments) var freshPaths = [ /\/admin.*\/products/, ] for (let path of freshPaths) { if (path.test) { if (path.test(e.state.url)) { location.reload() return false } } else if (options.url.search(path) !== -1) { location.reload() return false } } })
使用自定义 view
很多时候我们并不需要大动干戈地建立一个全部的 view,只需要在内置 view 中稍作修改。
这时候,我们需要先自定义一个 Content 类:
use Encore\Admin\Layout\Content; class MyContent extends Content { public function render() { $items = [ 'header' => $this->header, 'description' => $this->description, 'breadcrumb' => $this->breadcrumb, 'content' => $this->build(), ]; return view('admin.content', $items)->render(); } }
然后引用它:
public function index(MyContent $content) { return $content ->header('product') ->description($this->brand) ->body($this->grid()); }
这样一来,每次进入到 index 页面,都会渲染 admin.content 这个 view 。
view 的内容直接 copy 自 vendor/encore/laravel-admin/resources/views/content.blade.php
在 view 里插入 vue 组件
添加2部分代码即可。
第一部分是初始化 vue app:
<script data-exec-on-popstate> // boot up the demo $(function () { // vapp window.vapp = new Vue({ el: '#app', data () { return { status: { showGalleryEditor: false, }, store: { images: [], el: '', }, } }, components: {}, methods: { startGalleryEditing (event) { this.status.showGalleryEditor = true this.store.pk = $(event.target).parent().find('ul').data('pk') this.store.images = $(event.target).parent().find('img').toArray().map((e) => e.getAttribute('src')) window.p = $(event.target).parent().find('ul') }, }, }) }) </script>
第2部分是插入组件:
<gallery-editor :status="status" :images="store.images" :pk="store.pk"> </gallery-editor>
vue 组件单独一个 js 文件
位置如下:
public/vendor/components/gallery-editor.js
定义如下:
Vue.component('gallery-editor', { props: { status: { showGalleryEditor: false, }, images: [], pk: 0, moveTo: [], }, data () { return {} }, watch: { images (newVal, oldVal) { this.moveTo = [] for (let src of newVal) { this.moveTo.push({ src: src, productId: this.pk, deleted: 0, }) } }, }, methods: { close () { this.status.showGalleryEditor = false }, save () { let args = {_token: LA.token} args.id = this.pk args.images = [] args.move_to = [] // console.log(JSON.stringify(this.moveTo)) for (let imgObj of this.moveTo) { if (imgObj.deleted) { continue } if (imgObj.productId === this.pk) { args.images.push(imgObj.src) } else { args.move_to.push({src: imgObj.src, product_id: imgObj.productId}) } } // console.log(JSON.stringify(args)) $.post('/admin/products/move-images', args).done(() => { toastr.success('success') this.status.showGalleryEditor = false }).fail((response) => { toastr.error(response.responseText) }) }, }, template: ` <div class="modal" tabindex="-1" role="dialog" :class="{show: status.showGalleryEditor, fade: !status.showGalleryEditor}"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close" @click="close"><span aria-hidden="true">×</span></button> <h4 class="modal-title">Editing images</h4> </div> <div class="modal-body"> <ul style="list-style-type: none;"> <li v-for="(imageObj, key) in moveTo" :key="key" style="margin-bottom: 8px"> <img :src="/UploadFiles/2021-04-02/imageObj.src">这是一个弹出式编辑框,具体作用就不解释了,只是个示例。
然后还需要在
Admin/bootstrap.php
中引用这个 js 文件:
Admin::js('/vendor/components/gallery-editor.js');
为什么不把组件代码直接写进 view 中呢?因为 pjax 的后端逻辑似乎有 bug,template 的内容无法全部渲染到前端,导致页面出错。
总结
以上所述是小编给大家介绍的laravel-admin 与 vue 结合使用实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]