使用Laravel 5和AngularJS时,blade标签冲突问题

11

我正在尝试在 Laravel 5 中设置 Angular。

我已经尝试在 appServiceProvider 中进行设置:

public function boot()
{
    \Blade::setRawTags("[[", "]]");
    \Blade::setContentTags('<%', '%>'); // for variables and all things Blade
    \Blade::setEscapedContentTags('<%%', '%%>'); // for escaped data
}

随着:

<div>
  <input type="text" ng-model="yourName" placeholder="Enter a name here">
  <h1>Hello, {{ yourName }}!</h1>
</div>

但我得到的是:

Use of undefined constant yourName - assumed 'yourName'...

如果在您的控制器中调用 \Blade::getTags(),您会得到什么? - lukasgeiter
哎呀,试试\Blade::getContentTags() - lukasgeiter
1
奇怪...这意味着设置标签实际上起作用了。你尝试过清空视图缓存吗?(删除storage/framework/views中的所有视图编译视图) - lukasgeiter
使用在我的appServiceProvider中定义的<%和%> - imperium2335
那些是内容标签。它们将被转义。你必须使用原始标签。请参见这个答案以了解三种不同标签的简短描述。 - lukasgeiter
显示剩余6条评论
4个回答

47

最简单的方法是在你的Angular代码前面加上 @ 符号:

 <div>
  <input type="text" ng-model="yourName" placeholder="Enter a name here">
  <h1>Hello, @{{ yourName }}!</h1>
</div>

来源


如果您使用的是 Laravel >= 5.3 Homestead,则需要禁用 Vue 才能使 Angular 标签正常工作,并使用 @ 符号。启用 Vue 后,简单标签将起作用,但标签中没有变量解析或模型更新。 - Scott Byers

4

Laravel >= 5.3

在花括号前面添加 @ 仍然有效,但 Laravel 还包含了另一个方便的 Blade 工具,可以将整个块标记为原样:

@verbatim
<div>
    {{ ctl.variable1 }}
    {{ ctl.variable2 }}
</div>
@endverbatim

如果你在使用Blade模板渲染方面不太熟悉,这将非常有帮助。


4
当涉及到 Blade (扩展 Blade,更改标签等)的更改时,始终确保删除缓存视图。
它们位于 `storage/framework/views`。
只需删除所有文件(除了 `.gitignore`)即可。
如果您想要更实用一些的东西,可以创建一个命令来执行此操作。例如像这个

0

否则你需要修改Angular语法...

var sampleApp = angular.module('sampleApp', [], function($interpolateProvider) {
    $interpolateProvider.startSymbol('<%');
    $interpolateProvider.endSymbol('%>');
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接