文章目录

  • 一. Inertia流程
    • 1. 全局变量
      • 1.1 $page
  • 参考文章

一. Inertia流程

1. 全局变量

1.1 $page

问题:
在查看JetStream给的登录界面代码中,入口文件如下:

cat \resources\js\Pages\Welcome.vue

发现这里有一段代码有个$page属性比较奇怪,原文如下:

<inertia-link v-if="$page.props.user" href="/dashboard" class="text-sm text-gray-700 underline">

在Vue中,我知道有$ref/$attr/$data这些带着$的系统定义属性,但是$page是什么东西?

回答:
首先看一下这个文件:

cat \node_modules\@inertiajs\inertia-vue3\src\app.js

目前猜测,这应该是Inertia进行环境初始化的主文件。里面有两个导出配置:

export const plugin = {install(app) {Inertia.form = useFormObject.defineProperty(app.config.globalProperties, '$inertia', { get: () => Inertia })Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })app.mixin(remember)app.component('InertiaLink', link)},
}export function usePage() {return {props: computed(() => page.value.props),url: computed(() => page.value.url),component: computed(() => page.value.component),version: computed(() => page.value.version),}
}

在Inertia的ShareData文档中也提到,访问共享数据可以使用:
Access shared data using the $page property or the usePage() hook.
所以,$page就是Inertia提供的可以方便访问页面属性的全局变量了。

引申:

这里所谓的页面属性,其实是利用了HTML5的自定义属性"data-*"来实现的。
Inertia将我们访问的根页面,设定为这样的div:

<div id="app" data-page='{"component":"Event","props":{"event":{"id":80,"title":"Birthday party","start_date":"2019-06-02","description":"xxxxxx"}},"url":"/events/80","version":"c32b8e4965f418ad16eaebba1d4e960f"}'></div>

有了这个根元素,在Vue中就可以通过document.getElementById('app').dataset.page来获取我们给定的Json数据,在Vue中还原出这样的数据结构:

  • component: The name of the JavaScript page component.
  • props: The page props (data).
  • url: The page url.
  • version: The current asset version.

创建Vue实例的具体代码如下:

const el = document.getElementById('app')
createApp({render: () => h(App, {initialPage: JSON.parse(el.dataset.page), // html中给的服务端数据resolveComponent: name => require(`./Pages/${name}`).default,})
}).use(plugin).mount(el)

参考文章

https://inertiajs.com/client-side-setup

Laravel-Vue开发初探二:Inertia拾遗相关推荐

  1. laravel+vue开发环境搭建

    From: https://www.jianshu.com/p/1c2cc11ba46f 描述 最近通过laravel在公司做了一些项目,但本身前端出身的我,总是感觉lphp开发过程中,前端写好页面, ...

  2. Vue开发入门(二) | 说说Vue全家桶有哪些~

    全家桶,顾名思义,就是一个系列,可以组合开发成完整强大的Vue项目 前言: *Vue两大核心思想:组件化和数据驱动. 组件化:把整体拆分为各个可以复用的个体 数据驱动:通过数据变化直接影响bom展示, ...

  3. php后台开发(二)Laravel框架

    php后台开发(二)Laravel框架 为了提高后台的开发效率,往往需要选择一套适合自己的开发框架,因此,选择了功能比较完善的Laravel框架,仔细学来,感觉和Python语言的框架Django非常 ...

  4. laravel + Vue 前后端分离 之 项目配置 - 开发环境

    既然你来到查看这篇文章,那么你应该知道PHP 版本 >=7. 接着看一下目录 |-blog |-- api |-- front 目录外部很简单,,不多说了,赶紧看重点 配置Laravel 作为前 ...

  5. 初探webpack之从零搭建Vue开发环境

    初探webpack之搭建Vue开发环境 平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码, ...

  6. 基于C#进行AutoCAD二次开发初探(二)——C#编写代码直接打开AutoCAD并显示图形

    AutoCAD 2006 Type Library   //我用的是CAD2006版 AutoCAD/ObiectDBX Common 16.0 Type Library 把这两个引用的命名空间引进来 ...

  7. 自学Vue开发Dapp去中心化钱包(二)

    目录​​​​​​​​​​​​​​ 前言 一.Vue基础学习 二.开始使用 1.安装Node.js 2.安装淘宝npm 3.安装vue-cli 4.创建一个Vue项目 6.idea打开项目 7.安装依赖 ...

  8. 基于C#进行AutoCAD二次开发初探(一)——调用dll库

    自己是测绘行业,不可避免要跟CAD打交道.因为之前用C#写了一个小软件,希望能够自动调用CAD画等高线,所以想基于C#进行Autocad的二次开发.但自己在此方面真的是零基础菜鸟一只.搜了大量的资料, ...

  9. 【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

    目录 一.什么是Vue 1.前端技术的发展(html.CSS.JavaScript) (1)JQuery:是对JavaScript进行了封装,使得操作DOM.事件处理.动画处理.Ajax交互变得非常简 ...

  10. 168.Vue.js智能扫码点餐系统(二)【搭建Vue开发环境】2019.03.18

    0.知识点 搭建开发环境 1.搭建Vue开发环境 2.安装vue-cli脚手架 安装命令 // 第一种: npm install --global vue-cli// 第二种 cnpm install ...

最新文章

  1. Maven中的profile和spring boot中的profile进行结合
  2. Jenkins+Gradle+Git+Pyger+二维码搭建Android自动打包平台
  3. Docker 镜像之存储管理
  4. 使用QCustomPlot绘图的基础
  5. 【CodeForces - 833A】The Meaningless Game(思维题,数学,可用牛顿迭代法,知识点总结)
  6. ubuntu16.04安装微信
  7. 使用GUID作为数据库主键与INT作为主键的性能测试
  8. 疑似OPPO Reno6系列新机通过工信部认证:配备6.43英寸屏 机身仅7.9mm
  9. 奈雪的茶回应违规操作事件:虚心接受意见并及时改进
  10. 计算机应用段落设置,计算机应用操作基础.docx
  11. python输入文本的缩写是什么_Python如何使用NLP从缩写文本中插入单词?
  12. Arcgis执行Raster Project时报Error001143 : Background server threw an exception
  13. python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...
  14. java浮点数转二进制_浮点数转换成二进制
  15. php易宝支付扫码支付代码_谈谈扫码支付
  16. 运维笔记-lnmp一键安装问题
  17. ureport 显示html,UReport2 与业务结合
  18. 中学计算机兴趣小组 计划,陵口中学科技兴趣小组工作计划
  19. 黑马程序员---继承(下)
  20. 【前端】elementUI分页场景下对表格进行排序

热门文章

  1. wifi跑包-不用U盘直接拷出握手包-开启虚拟机的ftp
  2. 用c语言编写一个日期计算器
  3. android进入微信加好友页面,Xposed-微信自动加好友功能实现2--自动跳转验证申请页面...
  4. 华为改变策略,出击超低端手机市场
  5. linux安装python教程视频_新手开发者的极简Linux上手Python视频教程
  6. 帝国php本地安装教程,帝国CMS整站源码通用安装教程
  7. JES专栏:Portlets的国际化和本地化(eNews 第二十八期/2007.09)
  8. php --enable-maintainer-zts,我的PHP编译日志
  9. 从零开始玩转Franka Panda机器人
  10. WEB测试项目实战——2.产品需求与设计评审