尝试将 AngularJS var 与 Laravel Blade var 连接起来

Posted

技术标签:

【中文标题】尝试将 AngularJS var 与 Laravel Blade var 连接起来【英文标题】:Trying to concatenate an AngularJS var with a Laravel Blade var 【发布时间】:2015-06-25 16:38:36 【问题描述】:

我正在开发一个 Laravel 应用程序。首先,我使用 FormBuilder 制作了一个表单,所以我有了这个:

!! Form::open(['method' => 'delete', 'route' => ['clientes.destroy', $cliente->id]]) !!

当我决定开始使用 AngularJS 时,我意识到我必须删除 FormBuilder,因为现在我必须使用 Angular 打印“客户 ID”(使用 ng-repeat)。所以我把我的代码改成了这个(如果你不知道 Laravel 忽略隐藏的输入):

<form method="POST" action=" route('clientes.destroy') /@ cliente.id ">
    <input name="_method" type="hidden" value="DELETE">
    <input name="_token" type="hidden" value=" csrf_token() ">

问题是 @ cliente.id 正在破坏我的应用程序,因此它不显示我的客户。

更多上下文:此表单位于客户表中,并显示一个用于删除客户的按钮。

我应该如何打印变量?

编辑:如果我从表单中删除 action 属性,则会显示所有客户端,因此我 100% 确定问题出在此连接上。

EDIT2:这行得通

<form method="POST" action="@ cliente.id ">

这也有效

<form method="POST" action=" route('clientes.destroy') ">

EDIT3:整个中继器。

<tr ng-repeat="cliente in buscador.clientes">
    <td>@ cliente.tipo.nombre </td>
    <td>@ cliente.nombre </td>
    <td>@ cliente.direccion  </td>
    <td>@ cliente.telefono  </td>
    <td>@ cliente.email  </td>
    <td>@ cliente.rubro  </td>
    <td>
    <form method="POST" action="@ ' route('clientes.destroy') /' + cliente.id ">
        <input name="_method" type="hidden" value="DELETE">
        <input name="_token" type="hidden" value=" csrf_token() ">
        <button class="btn btn-danger"><i class="fa fa-trash-o"></i></button>
    </form>
</td>

【问题讨论】:

看起来 route('clientes.destroy') 没有被 php 解析并替换为字符串。 你确定你有这个表单在刀片模板中,而不是在角度模板中? 所有这些代码都在 index.blade.php 中,正如您在 EDIT2 中看到的那样,它们都单独工作,当我尝试连接它们时出现问题 所以请点击Ctrl+U查看源码,应该与PHP生成的&lt;form&gt;标签一致。在此处粘贴该行。 用你给定的代码输出这个:
(没有解析)
【参考方案1】:

1.首先你需要更改AngularJS花括号不与Blade模板引擎冲突:

var app = angular.module('app', []) 

  .config(function($interpolateProvider) 
    // To prevent the conflict of `` and `` symbols
    // between Blade template engine and AngularJS templating we need
    // to use different symbols for AngularJS.

    $interpolateProvider.startSymbol('<%=');
    $interpolateProvider.endSymbol('%>');
  );

您当前正在使用@ ,这是冲突的根源,这就是 PHP 无法正确解析您的代码的原因。我建议使用&lt;%= %&gt;,因为它是常用的结构,你可以在Underscore templates找到它。

2.那么,从Angular 1.2.x开始,你可以bind only one expression as action.

所以,这段代码应该可以工作:

<form 
  method="POST" 
  action="<%= ' route('clientes.destroy') /' + cliente.id %>">

【讨论】:

是的。它是: Error: [$parse:lexerr] errors.angularjs.org/1.3.15/$parse/… at Error (native) at ajax.googleapis.com/ajax/libs/angularjs/1.3.15/… at hc.throwError (ajax.googleapis.com/ajax/libs/angularjs/1.3.15/…) at hc.readString (ajax.googleapis.com/ajax/libs/angularjs/1.3.15/…) at hc.lex (ajax.googleapis.com/ajax/libs/angularjs/1.3.15/…)在 ib.parse (https://... 能否在此处查看生成的刀片模板的结果源代码并复制粘贴带有表单标签的行 当然,使用您给定的代码,它会输出: 不是那一行,我需要&lt;form&gt;标签行 它没有打印出来。 内没有任何内容被打印。你想让我在问题中添加完整的代码吗?【参考方案2】:

无需修改任何内容的更好解决方案是:

action="url('urlportal')/@cliente.id"

【讨论】:

以上是关于尝试将 AngularJS var 与 Laravel Blade var 连接起来的主要内容,如果未能解决你的问题,请参考以下文章

将 angularjs 服务注入 Angular

将 AngularJS 与 PassportJS 结合时出现 CORS 问题

如何将 Mongoose 模型与 angularjs 复选框绑定

将 AngularJS html5mode 与 nodeJS 和 Express 一起使用

AngularJS 三元表达式无效

如何将 REST 与 Node.js 和 AngularJS 一起使用在不同的端口上?