Routing.generate()模块(FriendsofSymfony / FOSjsRouting Bundle)

时间:2016-07-04 14:37:28

标签: angularjs json symfony

我正在尝试在AngularJS中创建一个多输入标签输入字段,我还想在其中添加自动完成,这样在输入字段中输入至少3个字母时,数据库中已存在的标记名称将显示为建议在下拉列表中。

问题在于: 我正在使用FOSjsRouting Bundle的Routing.generate()模块来调用javascript代码中的控制器操作(该操作反过来返回以下JsonResponse对象): enter image description here

这是控制器代码:

/**
 * @Route("/jsondata", options={"expose"=true}, name="my_route_to_json_data")
 */
public function tagsAction(Request $request)
{        
    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
       'SELECT t.text
       FROM AppBundle:Tag t
       WHERE t.id > :id
       ORDER BY t.id ASC'
       )->setParameter('id', '0');

    $tagsdata = $query->getScalarResult();
    $response = new Response(json_encode($tagsdata));
    $response->headers->set('Content-Type', 'application/json');
    return $response;
}

这是AngularJS代码:

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

app.controller('MainCtrl', function($scope, $http) {
  $scope.loadTags = function(query) {
  return $http.get(Routing.generate('my_route_to_json_data'));
    };
  });

以下是我得到的结果: enter image description here

现在我在tags.json中保存Json响应并在不使用Routing.generate()模块的情况下调用它:

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

            app.controller('MainCtrl', function($scope, $http) {
               $scope.loadTags = function(query) {
               return $http.get('http://localhost/AngularTags/web/js/tags.json');

                }
            });

我得到了完美的工作结果: enter image description here

现在我知道问题在于正确使用Routing.generate()。由于我是AngularJS的新手,并且我刚刚学习如何在控制台中调试(顺便说一下,我很喜欢),我不能完全确定我是否可以自己解决问题。任何帮助表示赞赏。

抱歉,这篇文章太长了,只是想说清楚。 所以,等待回应......

1 个答案:

答案 0 :(得分:1)

这不是AngularJS的问题,这是JavaScript中可变范围的问题。

您是否导入了HTML as specified in the documentation中的脚本?