使用Angular捕获Symfony 2中render()方法发送的响应对象

时间:2016-05-24 09:04:03

标签: angularjs symfony

是否可以获取render()(Symfony2)方法发送的响应对象?

一个例子:

public function indexAction(){

      $params = array('Hi' =>'Hello world', 'userName' =>'Jack');

      return $this->render('exampleBundle:Default:index.html.twig', $params);
    }

我完全能够在$params文件中捕获var html.twig及其内容,但我无法弄清楚如何在javascript中获取该内容以使用angular渲染视图。为了以防万一,我尝试了许多荒谬的事情,但显然它们根本不起作用。

也许根本不可能,我需要重新设计它或者在加载文档后进行新的ajax调用,而不是通过render()方法传递内容。我不是很确定,我可以在不提出ajax请求的情况下达到此目的吗?

1 个答案:

答案 0 :(得分:0)

这种做法在我看来是件坏事。大多数现代客户端应用程序的理念是尽快从服务器加载网页,并通过xhr请求加载数据。

说如果你需要或想要这样做,你可以用不同的方式实现它:

我没有尝试过这些示例,因此可能包含一些语法错误:

1- JS Vanilla方法;在html.twig

<script type="text/javascript">
    window.nameSpaceOfMyApp = window.nameSpaceOfMyApp || {};
    window.nameSpaceOfMyApp.exchange = window.nameSpaceOfMyApp.exchange || {};
    window.nameSpaceOfMyApp.exchange.params = JSON.parse({{$params |json_encode()}});
</script>

2-更多“Angular Way”不会重载全局命名空间并更好地测试...如果此时你有加载angular.js你可以在twig模板中创建角度App的主模块(如果你不能使用你的主模块,您可以使用新模块并将其作为主模块的依赖项) 在html.twig

<script type="text/javascript">
    angular.module('moduleName',[<dependencies>,...])
    .value('exchange',{
        params: JSON.parse({{$params |json_encode()}})
    })
</script>

稍后您可以在需要的地方注入此值。

angular.module('moduleName').controller('nameOfController',['exchange', function(exchange){
    console.log(exchange.params)
}]);