我的javascript文件中的Laravel 4 blade语法

Laravel 4 blade syntax within my javascript files

本文关键字:blade 语法 Laravel javascript 文件 我的      更新时间:2023-09-26

我的主页上有一些内联javascript,与一些刀片语法混合在一起,例如

    <script type="text/javascript">
        @if(Auth::user())
            if(path.indexOf('/user/' + {{Auth::user()->id}} ) != -1) {
                    $( "#tabs" ).tabs();
            };
        @endif
    </script>

它一直有效,直到我想把javascript移到一个外部文件.js。每当添加blade语法时,我都会出错。有没有一种方法可以在javascript文件.js中融合blade语法?我尝试重命名为file.blade.js,但没有成功。。。

尽管接受的解决方案可以工作,但这绝对是一个反模式。

如果我看到这不是谁写的,我会非常困惑到底发生了什么

我的建议是在你的PHP文件中,有一个块,它可以获得你在外部文件中需要的所有值,然后调用外部文件。

因此,在你的PHP文件中,你会有这样的东西:

<script>
    var userID = "{{ Auth::user()->id }}";
    var isUser = "{{ Auth::user() }}"
</script>
{{ HTML::script('path/to/js/file.js') }}

在您的javascript文件中:

if(isUser)
{
    if(path.indexOf('/user/' + userID ) != -1) {
        $( "#tabs" ).tabs();
    };
}

您可以尝试将您的javascript文件保存在app/views文件夹中,并将其重命名为xxx.blade.php,是的.blade.php,因为Blade Engine只有在其.blade.php和使用@include('your javascript filename')包含Blade解析的javascript文件时才会解析它,它才会工作。

我和@BrandonRomano做了同样的事情,但我找到了更好的方法。使用以下方法将值从PHP直接发送到JS变量:PHP变量到Js转换器

PHP:

JavaScript::put([
    'foo' => 'bar',
    'user' => User::first(),
    'age' => 29
]);

JS:

console.log(foo); // bar
console.log(user); // User Obj
console.log(age); // 29

您可以设置一个名称空间,如:

console.log(server.foo)

您正在从PHP输出字符串,因此必须将该字符串包含在'

<script type="text/javascript">
    @if(Auth::user())
        if(path.indexOf('/user/' + '{{Auth::user()->id}}' ) != -1) {
                $( "#tabs" ).tabs();
        };
    @endif
</script>