Подтвердить что ты не робот

Angular: передача параметров от $routeProvider до контроллера

У меня есть несколько маршрутов, которые вызывают один и тот же контроллер, и я хотел бы передать ему разные переменные.

// Example
$routeProvider.
  when('/a', {
    templateUrl: 'test.html',
    controller: 'MyController' // should get passed 'exampleA'
  }).
  when('/b', {
    templateUrl: 'test.html',
    controller: 'MyController' // should get passed 'exampleB'
});

Я знаю, что могу использовать объект "разрешить":

$routeProvider.
  when('/a', {
    templateUrl: 'test.html',
    controller: 'MyController',
    resolve: {test: function() { return true; }}
});

Чтобы передать значение как зависимость:

app.controller('MyController', ['$scope', 'test', function ($scope, test) {
  console.log(test); // true
}

Моя проблема с этим подходом в том, что мое приложение падает, если объект разрешения отсутствует на других маршрутах, и я хотел бы передать необязательные параметры.

Есть ли способ передать определенные параметры в контроллер (от поставщика маршрута)?


Спасибо

4b9b3361

Ответ 1

Routing:

$routeProvider.
  when('/a', {
    templateUrl: 'test.html',
    controller: 'MyController',
    paramExample: 'exampleA'
  }).
  when('/b', {
    templateUrl: 'test.html',
    controller: 'MyController',
    paramExample: 'exampleB'
});

Доступ: введите $route в свой контроллер, затем используйте

 app.controller('MyController', ['$scope', '$route', function ($scope, $route) {
      var paramValue = $route.current.$$route.paramExample;
      console.log(paramValue); 
 }

Ответ 2

Вы можете использовать resolve и $route.currrent.params.test, чтобы передать параметр следующим образом:

$routeProvider
  .when('/a', {
    templateUrl: 'view.html',
    controller: 'MainCtrl',
    resolve: {
        test: function ($route) { $route.current.params.test = true; }
    }
  })
  .when('/b', {
    templateUrl: 'view.html',
    controller: 'MainCtrl',
    resolve: {
        test: function ($route) { $route.current.params.test = false; }
    }
  })

Затем в вашем контроллере вы можете получить к нему доступ из $routeParams:

app.controller('MainCtrl', function($scope, $routeParams) {
  $scope.test = $routeParams.test;
})

http://plnkr.co/edit/ct1ZUI9DNqSZ7S9OZJdO?p=preview

Ответ 3

Самый естественный способ сделать это - делать то, что вы обычно делаете, когда хотите загрузить страницу с параметрами: используйте параметры запроса: http://yoururl.com?param1=value&param2=value

ngRoute поставляется с сервисом $routeParams, который вы можете ввести в свой контроллер. Теперь вы можете просто получить значения, подобные этому $routeParams.param1.

Другой способ сделать это - получить путь с помощью $location.path и установить там переменную.

Ответ 4

используя $routeParams

в главном файле js

routeApp.config(function($routeProvider) {
$routeProvider
    .when('/home', {
        templateUrl: 'http://uatsps.hbo.homebox.com/sites/programplanning/SiteAssets/HTML/AccessRequest/home.html',
        controller: 'StudentController'
    })
    .when('/viewStudents/:param1/:param2', {
        templateUrl: 'http://uatsps.hbo.homebox.com/sites/programplanning/SiteAssets/HTML/AccessRequest/viewStudents.html',
        controller: 'StudentController'
    })
    .otherwise({
        redirectTo: '/'
    });
 });

 routeApp.controller('StudentController',['$filter','$routeParams', '$location',function($filter,$routeParams,$location){
   var StudentCtrl = this;  
   StudentCtrl.param1 = $routeParams.param1;
   StudentCtrl.param2 = $routeParams.param2;
 }]);

вызов из Home.html

 <div class="container">
   <h2> Welcome </h2>
   <a href="#/viewStudents/myname/somevalue2">Students</a>
</div>