Angularjs和动态路线

时间:2015-07-09 14:41:10

标签: angularjs symfony angular-ui-router angular-ui-router-extras

我正在尝试通过执行以下操作在我的模板angularjs中创建一个链接:

 <a ng-href="/#!/content/[[value.id]]">[[key]]</a>

但我想知道自己是否有可能像symfony2那样做,例如:

的routing.yml

  home_redirect:
    path: /
    defaults:
        _controller: FrontendBundle:Controller:function
        path: /home
        permanent: true
    options:
        expose: true

通过以下方式在您的树枝模板中使用它:

<a href="{{ path('home_redirect')}}"> one link to home </a>

这真的非常有用,因为我不需要&#34;硬编码&#34;我所有的路线。

2 个答案:

答案 0 :(得分:2)

为确保正确路由,您可以使用ui-router。

以下是plunker

的例子

这是如何运作的:

1 - 按照github上的安装指南进行操作

2 - 写下您的州定义:

app.config(function($stateProvider, $urlRouterProvider){
  //If no route match, you'll go to /index
  $urlRouterProvider.otherwise('/index');

  //my index state
  $stateProvider
  .state('index', {
    url: '/index',
    templateUrl: 'index2.html',
    controller: 'IndexCtrl'
  })

  //the variable state depending on an url element
  .state('hello', {
    //you will be able to get name with $stateParams.name
    url: '/hello/:name',
    templateUrl: 'hello.html',
    controller: 'HelloCtrl'
  })  
});  

3 - 按州名写下链接:

//add this directive to an html element
//This will go to /index
ui-sref="index"
//This will go to /hello/
ui-sref="hello"
//This will go to /hello/ben
ui-sref="hello({name:'ben'})"
//This will go to /hello/{myname}
ui-sref="hello({name:myname})"

4 - 将参数输入您的控制器:

//inject $stateParams
app.controller('HelloCtrl', function($scope, $stateParams){
  $scope.controller = "IndexCtrl";
  //get the param name like this
  $scope.name = $stateParams.name;
});

希望它有所帮助。还要记住,ui-router有一些非常强大的工具,比如resolve和嵌套状态/视图。你现在或以后可能都需要这些论文。

PS:如果plunker不起作用,只需将其分叉并再次保存。

答案 1 :(得分:1)

你可以这样做:

'superAdmin', 'admin', 'manage', 'managerModel1', 'managerModel2'

你可以这样做:

'use strict';

angular.module('AngularModule')
    .config(function ($stateProvider) {
        $stateProvider
            .state('YourStateName', {
                url: '/your/url',
                views: {
                    'aViewName': {
                        templateUrl:'views/components/templates/yourTemplate.html',
                        controller: 'YourController'
                    }
                },
                resolve: {

                }
            });
    });


// then in your controller

angular.module('AngularModule')
.controller('MyController',function($scope, $state){
$scope.goTo = function(){
$state.go('YourStateName');
}
}

);

//in your html make sure the <a> tag is in scope with the 'MyController'

<a ng-click='goTo'>[[key]]</a>

以这种方式绕过控制器,您仍然可以将逻辑放在状态

中指定的控制器中