Угловой $ routeParams пуст

У меня есть действительно простое приложение Angular, которое ямы перегоняли к следующему:

var napp = angular.module('Napp',['ngResource']);

var CompanyCtrl = function($scope, $routeParams, $location, $resource) {
    console.log($routeParams);
};


napp.config(['$routeProvider', function($routeProvider) {
    $routeProvider
    .when('/company/edit/:id', 
      {templateUrl: '/partials/edit', controller: 'CompanyCtrl'}
    );
}]);

и HTML:


Когда я регистрирую $ routeParams, он появляется пустым. Когда я использую .otherwise (), он загрузит все, что ямы там указали. Любая идея, что ям отсутствует?

 wesbos11 июн. 2013 г., 21:00
Где находится маршрут $?
 Ajay Beniwal11 июн. 2013 г., 20:57
Можете ли вы увидеть, что вы получаете в $ route.current.params.id
 Mark Rajcok11 июн. 2013 г., 21:03
Посмотрите, решит ли это вашу проблему:deansofer.com/posts/view/14/...
 Ajay Beniwal11 июн. 2013 г., 21:06
$ route аналогично $ routeprovider, поэтому вставьте $ route в определение контроллера и попытайтесь напечатать указанное выше значение
 wesbos11 июн. 2013 г., 21:16
Вот что я вижу:wes.io/PaDD - Впрыскивать это так:wes.io/PZi7
 laurelnaiad20 июн. 2013 г., 07:56
$ routeParams isn 'не будет доступен для вашего контроллераконструктор, когда этоназывается. Введите его, когда вам это нужно - не надоПредположим, у вас есть контекстно-зависимая информация, когда создается экземпляр контроллера, - используйте контекстно-зависимые данные, когда он 's быть связанным.

Ответы на вопрос(7)

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

Так,

маршрутизатор:

var myApp = angular.module('myApp', []);
myApp.config(function($routeProvider){

  $routeProvider.when('/projects/:id', 
    {templateUrl: '/views/projects/show.html', controller: 'ProjectCtrl'}
  );

});

контроллер:

myApp.controller('ProjectCtrl', function($scope, $routeParams){
  $scope.id = $routeParams.id;
  console.log('test');
});

Посмотреть:

<h1>{{ id }}</h1>

Когда я удалил{{Я бы}}' с точки зрения ничего не было зарегистрировано и $ routeParams был пуст, по крайней мере, во время контроллера 'с экземпляром. Как указывалось в некоторых из приведенных выше ответов, параметры маршрута передаются асинхронно, поэтому контроллер без привязок к этому свойству выиграл.выполнить. Так что, не уверен, что именно тыМы отогнали ваш фрагмент, но надеюсь, это поможет!

Вы'мы указали контроллер в двух местах, оба в представлении (

) и в $ routeProvider (.when('/company/edit/:id', {templateUrl: '/partials/edit', controller: 'CompanyCtrl'}). Я'd удалить тот, что в представлении.

Вы должны зарегистрировать контроллер в модуле при указании его в $ routeProvider (вы все равно должны это сделать, это 'лучше избегать глобальных контроллеров). Делатьnapp.controller('CompanyCtrl', function ... вместо .var CompanyCtrl = function ...

Вам необходимо указатьнг-просмотр когда ты'Вы используете сервис $ route (не уверен, чтозанимаешься этим или нет)

Новый код:

var napp = angular.module('Napp', ['ngResource']);

napp.controller('CompanyCtrl', function ($scope, $routeParams, $location, $resource) {
  console.log($routeParams);
});

napp.config(['$routeProvider', function ($routeProvider) {
  $routeProvider
    .when('/company/edit/:id',
      {templateUrl: '/partials/edit', controller: 'CompanyCtrl'}
    );
}]);

Шаблон (/ parials / edit)

<div> ... </div>

И приложение (index.html или что-то) я

...  <div ng-view=""></div> 

Мы создали пример работающего плунжера:http://plnkr.co/edit/PQXke2d1IEJfh2BKNE23?p=preview

 FireDragon26 апр. 2014 г., 00:18
использование ng-view при использовании службы $ route было большой вещью, которую мне нужно было понять, но развеэто очевидно для меня. Также я никогда не осознавал, что при использовании маршрутизации вы должны объявлять контроллер только в $ routeProvider, а не в представлении. имеет смысл. Спасибо!

http://plunker.co/edit/ziLG1cZg8D8cYoiDcWRg?p=preview

Но у вас есть некоторые ошибки в вашем коде:

Ваш некажется, естьngView в вашем коде.$routeProvider используетngView знать, куда следует вставить шаблонсодержание. Так что вам нужно где-то на вашей странице.

Вы'переопределяя вашиCompanyCtrl в двух местах. Вы должны указать это либо в$routeProvider, или в вашем шаблоне, используяng-controller, Мне нравится указывать его в шаблоне, но этоПросто личные предпочтения.

Хотя это не ошибка, выпереопределяя вашиCompanyCtrl в глобальном масштабе, вместо регистрации на вашемNapp использование модуля.Napp.controller(name, fn)

Надеюсь это поможет!

Вы всегда можете перейти по каналу #angularjs irc на freenode:всегда активные люди готовы помочь

это будет пустым. RouteParams загружается асинхронно, поэтому вам нужно подождать, пока он получит параметры. Поместите это в свой контроллер:

$scope.$on('$routeChangeSuccess', function() {
   console.log($routeParams); 
});
Решение Вопроса

Прежде всего попробуйте это с

$locationProvider.html5Mode(true);

Это должно исправить ваш стартовый код. Затем настройте свой код для поддержки браузеров без pushState.

Надеюсь это поможет!

 Sami29 окт. 2015 г., 12:47
Как и где это использовать?

ui-router вместо .ngRoute

Если это'В этом случае используйте$stateParams вместо .$routeParams

https://stackoverflow.com/a/26946824/995229

templateUrl указывает на неверный шаблон?

Когда вы меняетеtemplateUrl в несуществующий файл, вы заметите, что$routeParams больше не будет заполняться (потому что AngularJS обнаруживает ошибку при разрешении шаблона).

Для вашего удобства я создал рабочий plnkr с вашим кодом, который вы можете просто скопировать и вставить, чтобы ваше приложение работало:

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

Как только вы нажмете на ссылку в примере, вы увидите маршрутизатор в действии.

Надеюсь, это поможет!

Ваш ответ на вопрос