首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Javascript设置为在API端点中使用的刀片模板?

如何将Javascript设置为在API端点中使用的刀片模板?
EN

Stack Overflow用户
提问于 2021-06-25 08:04:10
回答 1查看 45关注 0票数 2

我正在构建一个Javascript程序,这是由一个外部的包含加载。如下所示:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    ...html here....    

<script defer>
    myjs = document.createElement('script');
    myjs.setAttribute('src', 'http://myapi.com/api/v1/get_the_js/');
    myjs.setAttribute('type', 'text/javascript');
    document.head.appendChild(myjs);
</script>
</body>
</html>

在Laravel中,我目前有去往这个函数的路由:

代码语言:javascript
运行
复制
class JSPluginController extends Controller
{    
    public function index()
    {
        $js = resource_path() . '/js/myjs.js';
        return file_get_contents($js);
    }
}

这是可行的。但是,我想将myjs.js更改为刀片模板,以便可以使用刀片的功能。

到目前为止,我找到的唯一方法是添加脚本标记,这样我就可以在IDE中实际看到js格式,但这显然会破坏API的返回输出。这是我到目前为止所知道的:

终结点的路由如下:

代码语言:javascript
运行
复制
class JSPluginController extends Controller
{
    public function js_blade()
    {
        return view('jsplugin/main');
    }
}

和/resources/views/jsplugin/main.blade.js中:

代码语言:javascript
运行
复制
<script>
   .. my js goes here {{ $withBladeStuff }} ...
</script>

有没有更好的方法来做这件事?

值得注意的是,我还计划将我的JS分解为多个文件,比如根据需要将它们抽象为不同的部分。

(附注:我的PHP格式是PSR-12兼容的。不需要编辑,谢谢。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-29 21:58:48

我通过添加几个简单的步骤来满足我的需求,从而解决了这个问题。

为了清楚起见,此控制器将api端点作为脚本路由到外部站点,如下所示:

代码语言:javascript
运行
复制
<script defer>
    js = document.createElement('script');
    js.setAttribute('src', 'https://example.com/api/v1/get_js');
    js.setAttribute('type', 'text/javascript');
    document.head.appendChild(js);
</script>

所以它必须拉出不带标签的javascript。但是,在我的集成开发环境中编辑blade并不喜欢它,因为它是一个blade.php文件,我想要为JS自动设置代码样式。

因此,我更新了控制器,添加了一个变量$included:

代码语言:javascript
运行
复制
class JSPluginController extends Controller
{
    public function index()
    {
        $included = true;
        $env = \App::environment();

        return view('js/main', compact('included', 'env'));
    }
}

然后将$included变量传递给刀片(/resources/views/js/main.blade.php),这仍然允许我的集成开发环境进行代码格式化:

代码语言:javascript
运行
复制
@if(!$included)
<script>
@endif
    let hello_world = "{{ $env }}";
    document.write("The environment is: " + hello_world);
@if(!$included)
</script>
@endif

这很好地满足了我的需求!我可以使用blade的所有功能和控制,同时仍然保留我的代码格式。祝你编码愉快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68123955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档