Я использую динамическую маршрутизацию в разделе веб-сайта, где я показываю список элементов, используя ng-repeat. Когда кто-то нажимает на определенный элемент, его соответствующий контент отображается на новом представлении.Проблема с динамической маршрутизацией в AngularJS
Это моя нг-повтор часть кода:
<input type="text" placeholder="SEARCH" ng-model="search" />
<div id="track-list" ng-repeat="track in tracks | filter:search">
<a ng-href="#/radio/{{$index}}"><h3 class="track-list-title">{{track.title}}</h3></a>
<p class="track-list-date">{{track.date | date}}</p>
</div>
Это главный индексный файл:
<!DOCTYPE html>
<html ng-app="mainApp">
<head lang="en">
<meta charset="utf-8">
<title>Playlife Project</title>
<!-- styles -->
<link rel="stylesheet" href="css/bootstrap.css" />
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
<!-- scripts -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28//angular-route.min.js"></script>
<script src="http://d2v52k3cl9vedd.cloudfront.net/plangular/3.1.0/plangular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-animate.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<header>
<div id="logo"><a href="#/"><img src="img/logo.png" class="logo img-responsive" /></a></div>
<div id="nav" class="menu">
<ul>
<li class="menu-item"><a href="#/podcast">Podcast</a></li>
<li class="menu-item"><a href="#/record">Record Label</a></li>
<!--<li class="menu-item"><a href="#/live">Live Act</a></li>-->
<li class="menu-item"><a href="#/about">About</a></li>
<li class="menu-item"><a href="#/contact">Get In Touch</a></li>
<li class="menu-item"><a href="#">Shop</a></li>
<li class="mobile-menu-item"><i class="fa fa-2x fa-bars"></i></li>
</ul>
</div>
<div id="drawer" class="mobile-menu">
<ul>
<li><a href="#/podcast">Podcast</a></li>
<li><a href="#/record">Record Label</a></li>
<li><a href="#/live">Live Act</a></li>
<li><a href="#/contact">Get In Touch</a></li>
</ul>
</div>
</header>
<div ng-controller="homeController" class="{{pageClass}}" ng-view ></div>
<footer>
<div id="subscribe">
<form name="newsletter">
<input class="inp" type="email" name="email" id="email" placeholder="Be a part of the journey">
<input class="button" type="button" name="button" id="button" value="GET ON BOARD">
</form>
</div>
<div id="social">
<ul class="social-icons">
<li><a href="" target="_blank"><img src="img/facebook.png" /></a></li>
<li><a href="" target="_blank"><img src="img/soundcloud.png" /></a></li>
<li><a href="" target="_blank"><img src="img/twitter.png" /></a></li>
<li><a href="" target="_blank"><img src="img/youtube.png" /></a></li>
<li><a href="" target="_blank"><img src="img/instagram.png" /></a></li>
</ul>
</div>
</footer>
<script type="text/javascript" src="script/main.js"></script>
<script type="text/javascript" src="script/script.js"></script>
</body>
</html>
Это основное приложение:
var mainApp = angular.module("mainApp", ['ngRoute', 'ngAnimate', 'plangular']);
/* page routing */
mainApp.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/home.html',
controller: 'homeController'
})
.when('/podcast', {
templateUrl: 'views/podcast.html',
controller: 'podcastController'
})
.when('/radio/:id', {
templateUrl: 'views/radio.html',
controller: 'radioController'
})
.when('/record', {
templateUrl: 'views/record.html',
controller: 'recordController'
})
.when('/about', {
templateUrl: 'views/about.html',
controller: 'aboutController'
})
/*.when('/live', {
templateUrl: 'views/live.html',
controller: 'liveController'
})*/
.when('/contact', {
templateUrl: 'views/contact.html',
controller: 'contactController'
})
.otherwise({
redirectTo: '/'
});
})
/* player */
.config(function(plangularConfigProvider){
plangularConfigProvider.clientId = 'f39fd2f8db018982adef87c3ecd63e7a';
})
/* home controller */
.controller('homeController', function($scope, $timeout) {
$scope.pageClass = 'page page-home';
var INTERVAL = 5000, slides =[{head:"PLAY LIFE PROJECT", btn:'Listen to Playlife Podcast #002', link:'#', src:"./img/slide-1.jpg"},
{head:"SUBMIT YOUR TRACKS TO GET FEATURED ON PLAY LIFE RECORDS", btn:'Submit your track', link:'#', src:"./img/slide-2.jpg"},
{head:"PLAY LIVE CONNECT IS COMING NEAR YOU", btn:'Check Events', link:'#', src:"./img/slide-3.jpg"},
{head:"LISTEN TO PLAY LIVE PODCAST", btn:'Listen', link:'#', src:"./img/slide-4.jpg"}];
function setCurrentSlideIndex(index) {
$scope.currentIndex = index;
}
function isCurrentSlideIndex(index) {
return $scope.currentIndex === index;
}
function nextSlide() {
$scope.currentIndex = ($scope.currentIndex < $scope.slides.length - 1) ? ++$scope.currentIndex : 0;
$timeout(nextSlide, INTERVAL);
}
function loadSlides() {
$timeout(nextSlide, INTERVAL);
}
$scope.slides = slides;
$scope.currentIndex = 0;
$scope.setCurrentSlideIndex = setCurrentSlideIndex;
$scope.isCurrentSlideIndex = isCurrentSlideIndex;
loadSlides();
})
.controller('podcastController', ['$scope', function($scope) {
$scope.pageClass = 'page page-podcast';
$scope.tracks =[
{title:'Group Therapy 150 with Above & Beyond and Maor Levi', date: new Date(), link:'#'},
{title:'Group Therapy 151 with Above & Beyond and Martin Garrix', date: new Date(), link:'#'},
{title:'Group Therapy 152 with Above & Beyond and Grum', date: new Date(), link:'#'},
{title:'Group Therapy 153 with Above & Beyond and Andrew Bayer', date: new Date(), link:'#'},
{title:'Group Therapy 154 with Above & Beyond and Ilan Bluestone', date: new Date(), link:'#'},
{title:'Group Therapy 155 with Above & Beyond and Armin Van Buuren', date: new Date(), link:'#'},
{title:'Group Therapy 156 with Above & Beyond and Hardwell', date: new Date(), link:'#'}
]
}])
.controller('radioController', ['$scope', '$routeParams', function($scope, $routeParams) {
$scope.pageClass = 'page';
$scope.track=$scope.tracks[ $routeParams.id]
}])
.controller('recordController', function($scope) {
$scope.pageClass = 'page page-record';
})
.controller('aboutController', function($scope) {
$scope.pageClass = 'page-about';
})
/*
mainApp.controller('liveController', function($scope) {
$scope.pageClass = 'page-live';
});
*/
.controller('contactController', function($scope) {
$scope.pageClass = 'page page-contact';
});
Элементы являются отображается правильно, когда, когда я нажимаю на них, они перенаправляются на это новое представление, но оно не отображает заголовок, все, что я вижу, это {{track.title}}
.
При проверке в консоли браузера Google Chrome, я получаю эту ошибку:
TypeError: Cannot read property '4' of undefined
at new <anonymous> (http://localhost:63342/New%20website/script/main.js:97:31)
at d (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:34:265)
at Object.instantiate (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:34:394)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:66:112
at link (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28//angular-route.min.js:7:248)
at J (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:53:345)
at f (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:46:399)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:46:67
at https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:47:303
at u (https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:51:28) <div ng-controller="homeController" class="{{pageClass}} ng-scope" ng-view="">
Где вы кладете нг-приложение и нг-представление? – jianweichuah
@jianweichuah Я обновил код, пожалуйста, посмотрите сейчас –
Попробуйте изменить ''
в '