【问题标题】:Angularjs + Symfony2 routing can't make it workAngularjs + Symfony2 路由无法使其工作
【发布时间】:2014-07-06 16:31:11
【问题描述】:

我一直在学习 AngularJS,我想将它与我的 SF2 后端集成。 我对路线感到困惑,让我们看看我有什么:

当我们进入 /usermanager 时,symfony 路由系统会打开一个控制器来加载一个 twig 模板。在这个模板中,我加载了 Angular 所需的所有 js 组件并执行此操作:

 {% extends '::base.html.twig' %}

 {% block javascripts %}
    {{ parent() }}

    <script type="text/javascript" src="{{ asset('js/UserManager_Angular.js')}}"></script>
 {% endblock %}


 {% block body %}


<h1>User Manager</h1>

<div data-ng-view></div>
 {% endblock %}

现在这是我的角度代码:

   var UserManager = angular.module('UserManager', ['ngRoute','ngResource']);

UserManager.config(function($routeProvider){
   $routeProvider 
   .when('/addnew',
   {
       controller:'addNewController',
       templateUrl:Routing.generate('_UserManager_add_new_user')
   })
   .when('/',
   {
       controller:'UserManagerHome',
       templateUrl:Routing.generate('_UserManager_getUser_List')
   })

});

UserManager.factory('data_access',['$resource', 
    function($resource){
    return $resource(Routing.generate('_UserManager_getUserList'),{},{
        query:{method:'GET',isArray:true}
    });

}]);

UserManager.controller('UserManagerHome',function ($scope,data_access){
    $scope.users = data_access.query();    
    //$scope.orderProp = 'id';

});

ps:如您所见,我使用 FOSBundle 进行 js 路由公开。我想我知道如何使用它,因为我的工厂正确地从数据库中获取用户。

所以我想加载一个包含经典角度内容的文件,例如ng-repeat 等。这由这条路线表示:

.when('/usermanager',
{
    controller:'UserManagerHome',
    templateUrl:Routing.generate('_UserManager_userList')
})

这是我的路由文件:

_UserManager:
  pattern: /usermanager
  defaults: {_controller: AcmeBundle:UserManager:Home }
  options:
    expose: true

_UserManager_getUser_List:
  pattern: /usermanagerlist
  defaults: {_controller: NRtworksSubscriptionBundle:UserManager:list }
  options:
    expose: true  

_UserManager_getUserList:
  pattern: /usermanager/getuserlist
  defaults: {_controller: AcmeBundle:UserManager:getUserList }
  options:
    expose: true
  requirements:
    _format: json
    _method: GET    


_UserManager_add_new_user:
  pattern: /usermanager/addnew
  defaults : {_controller: AcmeBundle:AddNewUser:Home }
  options:
     expose: true

ps2:控制器几乎是空的,只是渲染我正在寻找的树枝模板。

目前,当我打开 /usermanager 时,我得到一个只有标题“用户管理器”的空白页面。我做错了什么?

【问题讨论】:

    标签: angularjs symfony-2.4


    【解决方案1】:

    您的角度路线在散列之后。这意味着

     www.yoursite.com/usermanager
    

    symfony 路由器的 witch 是 /usermanager,因为你的 Angular 应用程序只是 /

    如果你访问这里

     www.yoursite.com/usermanager/#/usermanager
    

    那么 angulars 路由将是 /usermanager。

    也就是说,Angular 的路由与 Symfony 的路由系统是完全不同的环境,它们不应该有冲突。因为角度路线发生在 # 之后。

    【讨论】:

    • 好的,我知道我应该将 .when('/usermanager', 更改为 .when('/',对吗?但它仍然不起作用,它把我放在这个地址上:192.168.1.19/Symfony24/web/app_dev.php/usermanager#
    • 我解决了!我想我没有正确执行路由 symfony。我的做法正确吗?有“空”控制器,只是渲染模板?
    • 控制器仅用于将您的模板与您的服务连接起来,并将可作用域的变量和函数传递给标记,如果您没有要传递的内容,那么是的,您做对了。
    • 如果我有什么要通过的,你的意思是?否则我可以直接路由到模板。
    • 是的,如果你有一些东西要作用域或处理,你需要一个控制器,否则它可以被省略。我还建议使用 angular-ui-router 而不是简单的。特别是如果您打算在某个时候嵌套视图
    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多