使用JavaScript将Laravel刀片模板追加/添加到当前视图

使用JavaScript将Laravel刀片模板追加/添加到当前视图,javascript,php,laravel,laravel-blade,Javascript,Php,Laravel,Laravel Blade,所以,我有这个: item.blade.php(locaton:'pages/components/item.blade.php') 现在我想做的是,当我单击add item按钮时,它还应该在列表中添加另一个pages.components.item模板 我已经在这些帖子上尝试了答案: 但是这两个答案都不起作用。你应该使用 附加文件项()上的函数 不是 函数addItem() 因为您在此处使用onAddInvoiceItem()调用它: <button onclick="onAdd

所以,我有这个:

item.blade.php
(locaton:'pages/components/item.blade.php')

现在我想做的是,当我单击add item按钮时,它还应该在
列表中添加另一个
pages.components.item
模板

我已经在这些帖子上尝试了答案:

但是这两个答案都不起作用。

你应该使用

附加文件项()上的函数

不是

函数addItem()

因为您在此处使用
onAddInvoiceItem()
调用它:

<button onclick="onAddInvoiceItem()">add item</button>
添加项目
因为您不能这样做,因为刀片服务器是服务器端处理的。不过,有一个解决方法,但代价昂贵且容易出现漏洞:创建自定义路由,在需要时输出所需的刀片文件

routes.php
中:

Route::get('/blades/{path_to_blade}', function($path_to_blade){
    return view($path_to_blade);
})->where('path_to_blade', '^[a-z0-9\_\-\.]+$');
然后您可以使用ajax调用或任何调用来调用请求的模板。我使用jQuery作为演示:

$.ajax({
    url: "/blades/template.path",
    cache: false,
    success: function(html){
        $("#element_in_which_to_insert").append(html);
    }
});

您还可以在浏览器中请求模板:
/blades/template.path
但再次声明:此方法容易出现漏洞。您应该使用Vue或Angular之类的前端框架。

糟糕,但它是一样的,我只是忘记在这里重命名另一个框架。
Route::get('/blades/{path_to_blade}', function($path_to_blade){
    return view($path_to_blade);
})->where('path_to_blade', '^[a-z0-9\_\-\.]+$');
$.ajax({
    url: "/blades/template.path",
    cache: false,
    success: function(html){
        $("#element_in_which_to_insert").append(html);
    }
});