Я пытаюсь передать идентификатор в URL-адресе, чтобы его можно было использовать другой страницей, более конкретно, с подробной страницей, но я ничего не теряю. URL-адрес идет по правильному маршруту, но идентификатор не проходит. Я понятия не имею, что я делаю неправильно.
здесь мой файл app.js:
$stateProvider.state('contact', {
url: '/contact',
templateUrl: 'templates/contact.html',
controller: 'mainController'
});
$stateProvider.state('contact.detail', {
url: '/detail/:id',
templateUrl: 'templates/contact.detail.html',
controller: 'detailController'
});
и вот мой файл контроллера:
myApp.controller('detailController', ['$scope', '$stateParams',
function ($scope, $stateParams) {
'use strict';
$scope.peoples = $scope.peoples[$stateParams.id];
}]);
и вот мой контактный файл:
<div class="container">
<div class="row">
<div class="col-md-6">
<table class="table table-striped">
<thead>
<th>First name</th>
<th>Last name</th>
<th>Age</th>
</thead>
<tbody>
<tr ng-repeat="person in peoples">
<td><a ui-sref="contact.detail({id: person.id})">{{person.firstname}}</a></td>
<td>{{person.lastname}}</td>
<td>{{person.age}}</td>
</tr>
</tbody>
</table>
</div>
<div class="col-md-6">
<div ui-view></div>
</div>
</div>
Существует рабочий пример
Одно дело:
поиск с помощью индексатора, например
$scope.peoples[someIdValue]
не будет$scope.peoples[someIdValue]
по идентификатору, а по позиции (индексу)
Второй момент:
не переустанавливайте ссылку $ scope.peoples с новым значением (и теряете эту ссылку)
Итак, это должно быть исправление (использование lodash
для поиска человека)
.controller('detailController', ['$scope', '$stateParams',
function($scope, $stateParams) {
//$scope.peoples = $scope.peoples[$stateParams.id];
$scope.person = _.find($scope.peoples, {id: $stateParams.id});
}])
Проверьте, что все в действии здесь
peoples
массива , когда он достигает деталь контроллер?$scope.peoples
? Попробуйте сделатьalert( $stateParams.id)
в подробном контроллере в качестве первой строки.$stateParams
- возможно, сделайтеconsole.log($stateParams) in your controller and call the url directly as in
' localhost: ... / detail / foo `?,