Как уже упоминалось в комментариях Claies, вы должны использовать маршрутизатор в вашем приложении. От docs:
маршруты применения в угловых объявляются через $routeProvider
, который является поставщиком на $route
службы. Эта услуга позволяет легко подключать контроллеры, просматривать шаблоны и текущее местоположение URL в браузере. Используя эту функцию, мы можем реализовать deep linking, что позволяет использовать историю браузера (назад и вперед) и закладки.
Есть несколько библиотек, в которых вы можете это сделать. Я буду использовать ngRoute
в качестве примера, поскольку он поставляется с Angular.js.
Чтобы сделать это, вам нужно добавить angular-route.js
и загрузить ngRoute
модуль:
var app = angular.module('seed-angular', [
'ngRoute'
]);
Вы также должны настроить $routeProvider
настроить ваш URL маршрутов, например:
app.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/team', {
templateUrl: 'team-list.html',
controller: 'MainController'
}).
when('/team/:teamId', {
templateUrl: 'team-detail.html',
controller: 'TeamDetailController'
}).
otherwise({
redirectTo: '/team'
});
}
]);
На приведенных выше маршрутах мы сконфигурировали /team
для перехода на страницу шаблона team-list.html
. Обратите внимание, что <a href="">
в настоящее время проходит параметр teamId
:
<article>
<section ng-controller="MainController">
<ul>
<li ng-repeat="x in details">
<a href="#/team/{{x._id}}">{{x.name}}</a>
</li>
</ul>
</section>
</article>
Мы также сконфигурированный /team/:teamId
на пути к шаблону страницы team-detail.html
(обратите внимание, что :teamId
means it's a parameter):
<article>
<section ng-controller="TeamDetailController">
<a href="#/teams">Back</a>
<div ng-repeat="x in details">
<strong>{{x._id}}</strong>
<ul>
<li>
{{x.firstName}} {{x.lastName}}
</li>
</ul>
</div>
</section>
</article>
, в котором вы сможете получить доступ teamId
через $routeParams.teamId
, чтобы получить подробную информацию о команде:
app.controller('TeamDetailController', function($scope, $http, $routeParams) {
var url = "http://est-teams.estudent.hr/api/teams/" + $routeParams.teamId + "/members";
$http.get(url).success(function(response) {
$scope.details = response;
});
});
См. Этот fiddle для примера.
Вы используете маршрутизатор в своем приложении? Обычно ваш 'href' не указывает на уникальный html-документ, он указывает на маршрут в вашем приложении, который загружает новый контент. Угловая - это приложение с одной страницей, а указание на новую html-страницу означает, что у вас есть более чем одно угловое приложение (одно приложение на странице), которое * может * работать, но не очень эффективно. см. https://docs.angularjs.org/api/ngRoute/service/$route или поставщик стороннего поставщика https://github.com/angular-ui/ui-router – Claies
Также (не связанный с вопросом под рукой) здесь вы смешиваете синтаксис, который теперь не влияет, но может быть неприятным, если ваш код становится более сложным. Вы используете синтаксис ControllerAs ('MainController as mc'), который предназначен для использования * вместо * непосредственно привязки к' $ scope', что и делает '$ scope.details'. – Claies