在 Laravel 中与前端共享数据

您是否曾经需要在应用程序 JavaScript 中访问当前用户的姓名或电子邮件地址?有很多不同的方法可以做到这一点,但让我们来看看两种最简单的方法。

#受限访问

将这些数据放在网站上的任何地方并不总是最好的主意。您可能只在处理特定元素或视图时才需要它,这时data-属性就派上用场了。

给定以下 HTML,我需要在单击按钮时显示当前用户的名称,否则,只显示通用的"Hello"消息。默认情况下,它将显示通用消息。

php 复制代码
<button type="button" id="show">Show Email Address</button>
<p id="message">Hello</p>

让我们data-name给元素添加一个属性<p>。

php 复制代码
<button type="button" id="show">Show Email Address</button>
<p id="message" data-name="{{ $user->name }}">Hello</p>

现在,如果我们想在 JavaScript 内部访问它,我们可以:

javascript 复制代码
document.getElementById('show').addEventListener('click', el => {
    const el = document.getElementById('message')
    
    el.innerText = `Hello, ${el.dataset.name}`
})

任何data-*属性都可以使用"驼峰式"等效格式访问。例如,data-first-name可以使用 来访问el.dataset.firstName。

如果您有一个模型,您需要{{ $user->toJson() }}在 Blade 模板中,然后JSON.parse(el.dataset.user)在 JavaScript 中正确访问它。

#全局对象

如果您有大量依赖于数据的不同脚本,那么下一个会很有用。

在布局文件中,我们可以在文档的<script>某处添加。<head>

html 复制代码
<head>
    <script>
        window.sharedData = {}
    </script>
</head>

它只是一个空对象,但这里我们可以采用两种不同的方法。要么使用 JavaScript 声明属性并确保json_encode()每个值,要么使用json_encode()关联数组并让 PHP 处理所有事情(几乎)。

#每一个项目

html 复制代码
<head>
    <script>
        window.sharedData = {
            user: {{ json_encode(auth()->user()) }},
            ids: {{ json_encode([1, 2, 3]) }}
        }
    </script>
</head>

#关联数组

html 复制代码
<head>
    <script>
        window.sharedData = json_encode([
            'user' => auth()->user(),
            'ids' => [1, 2, 3],
        ])
    </script>
</head>

值得注意的是,任何被序列化的对象的所有public属性都会在结果对象中公开。

如果您想要自定义序列化形式,您可以实现接口JsonSerializable并添加一个jsonSerialize()方法。此方法应返回一个包含您想要公开的内容的数组。

相关推荐
AI浩6 小时前
【Labelme数据操作】LabelMe标注批量复制工具 - 完整教程
运维·服务器·前端
涔溪6 小时前
CSS 网格布局(Grid Layout)核心概念、基础语法、常用属性、实战示例和进阶技巧全面讲解
前端·css
2401_878454536 小时前
浏览器工作原理
前端·javascript
西陵7 小时前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
by__csdn8 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
天天扭码8 小时前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
Luna-player9 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu05199 小时前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys9 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选9 小时前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc