【发布时间】:2015-08-13 17:04:17
【问题描述】:
作为许多其他开发人员面临的常见情况 - 我们有一个基于 Symfony2 / TWIG 的成熟应用程序,并且一些 html.twig 模板因 jQuery 代码而过多且难以维护。 扔掉 jQuery 并使用 Angular 怎么样? 如果我有一些关于角度模块、控制器、服务和范围的基本知识,以及对 Symfony2/TWIG 的深入了解,我的第一个问题是 - 将变量从我现有的控制器/树枝模板传递到角度的最佳方法是什么?控制器?
我不想通过单独的 JSON 调用和 Symfony2 中的单独控制器来加载范围。只想使用我在树枝中的现有变量。
一种方法是声明一些全局 js 变量:
<script>
var window.someVar = {{ twig_object | json_encode() }};
</script>
然后做某事
<div ng-controller="myCtrl" ng-init="init()">
<div ng-model="someVar"> .... </div>
</div>
在控制器中
app.controller('myCtrl', ['$scope', function($scope) {
$scope.init = function () {
if (window['someVar']) {
$scope['someVar'] = window['someVar'];
}
};
但这对我来说似乎太难看了(3 个步骤) 是否可以至少简化或以其他方式完成?
【问题讨论】:
-
我自己的经验是,你会不断地与 AngularJS 作斗争。对我来说,在我的路由中添加 _format=json 参数然后从控制器返回 json 会更容易。让 AngularJS 开心,让树枝远离画面。另外,您不必处理整个花括号问题。
-
@Cerad 我对花括号问题很好奇。在 MVC(我使用)中,我们引入了带有 at @ 符号的服务器端变量,但是您在此处使用与服务器端相同的语法(用于插值)(用于从服务器)!你不是时不时遇到问题,还是因为服务器先看到代码就OK了?
-
@JMK - 我不明白你的问题。我通过将 twig 和 angularjs 模板保存在单独的文件中来避免卷曲问题。 angularjs 直接提供,根本不经过 S2。
-
@JMK - 似乎没有任何花括号问题。我通常在我的模块中使用 $interpolateProvider,将 [[ ]] 用于 angular,将 {{ }} 用于 Twig。还是我在监督?