Blade 模板引入的 JS 文件中可以使用 Blade 语法吗?

下面是我的代码 ,一个 js 文件 ,通过 Blade 模板引入的

// 验证 parent_id ,更新的节点的 parent_id 不能等于自己 ,否则无法显示
if (this.admin_menu_form.parent_id == this.admin_menu_form.id) {
    // this.$message.error('菜单的的上级菜单不能是自己 ,如果你想增加新的菜单 ,请点击重置按钮')
    // this.$message.error("<?php __('tips_parent_node_cannot_be_itself') ?>")
    this.$message.error("@lang('tips_parent_node_cannot_be_itself')")
    return false
}

我想在 js 文件中使用 Blade 的 @lang 指令 ,或者使用 Laravel 的 __() 函数 ,以实现多语言的提示信息

但是好像不可以 ,想问问大家有没有方法 ~

如果不能直接使用的话 ,就只有在 Blade 模板中定义一个 js 变量了 ~

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

首先回答问题:不能!模版引擎应该是不可以参与解析 .js 文件的。

对于这种 国际化 情况,也有另一个思路

1、在 blade 基础模版(也就是每个模版都会继承)的 script 标签里,编写 window.i18n 对象(或叫字典)存储多语言,此处可以用 blade 模版语法, 需要写在 JavaScript 文件引用前。以下是示例

// 在 base.blade
<script>
  window.i18n = {
    tips_parent_node_cannot_be_itself: "@lang('tips_parent_node_cannot_be_itself')",
    other_tips: "@lang('other_tips')"
  }

</script>

2、在引入的 JavaScript 文件中这样使用变量

// 验证 parent_id ,更新的节点的 parent_id 不能等于自己 ,否则无法显示
if (this.admin_menu_form.parent_id == this.admin_menu_form.id) {
    this.$message.error(window.i18n.tips_parent_node_cannot_be_itself)
    return false
}

其利用的是浏览器环境中随处可用的 window 实例的特性,属于前端知识范畴

这种写法如果没有出现 Laravel 自己的错误提示,又未达到预期效果的,需要注意浏览器控制台的错误提示,结合实际输出的 html 源代码查找前端资料解决

4年前 评论
讨论数量: 4

只要通过@session...@stop引入就可以。比如,在主模板添加@yield('footer_scripts'),在继承了主模板的blade页面:

@section('footer_scripts')

<script>
    var javascriptNumber = $('#id').val();
    $("#response").html("{{ trans('messages.themessage', ['number' => javascriptNumber]) }}")
</script>
@stop
4年前 评论

blade 文件是由框架解析的,js文件是由浏览器解析的,所有指令,函数都需要放在blade 文件里面!

4年前 评论

如果是整个js文件引入,可以尝试用@include指令引入js文件,这时候js文件里面首尾要添加标签

4年前 评论

首先回答问题:不能!模版引擎应该是不可以参与解析 .js 文件的。

对于这种 国际化 情况,也有另一个思路

1、在 blade 基础模版(也就是每个模版都会继承)的 script 标签里,编写 window.i18n 对象(或叫字典)存储多语言,此处可以用 blade 模版语法, 需要写在 JavaScript 文件引用前。以下是示例

// 在 base.blade
<script>
  window.i18n = {
    tips_parent_node_cannot_be_itself: "@lang('tips_parent_node_cannot_be_itself')",
    other_tips: "@lang('other_tips')"
  }

</script>

2、在引入的 JavaScript 文件中这样使用变量

// 验证 parent_id ,更新的节点的 parent_id 不能等于自己 ,否则无法显示
if (this.admin_menu_form.parent_id == this.admin_menu_form.id) {
    this.$message.error(window.i18n.tips_parent_node_cannot_be_itself)
    return false
}

其利用的是浏览器环境中随处可用的 window 实例的特性,属于前端知识范畴

这种写法如果没有出现 Laravel 自己的错误提示,又未达到预期效果的,需要注意浏览器控制台的错误提示,结合实际输出的 html 源代码查找前端资料解决

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!