【发布时间】:2018-07-19 18:48:49
【问题描述】:
我正在使用 Spotify API 创建应用。 这个应用程序可以: 1.通过输入字段按艺术家姓名查找专辑 2. 专辑显示后,用户可以点击专辑标题查看曲目
我创建了 2 个视图: 1.相册视图 2. 曲目视图,专辑视图的子视图。
我想在专辑的 ng-repeat 中显示特定点击专辑的曲目 ui-view - 及其 ID,但结果是我在所有专辑中都有相同的点击专辑曲目列表列表。如何将专辑的曲目 ui-view 显示到单击的专辑容器中,这是 ng-repeat 指令的结果?
这是代码。
路由:
------
.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('albums', {
url: '/',
templateUrl: 'views/main.html',
controller: 'MainCtrl'
}).
state('albums.tracks', {
url: ':id/tracks',
templateUrl: 'views/tracks.html',
controller: 'TracksCtrl'
});
})
-----
相册视图:
<div ng-if="albums.items">
<h1>{{searchedArtist}}'s Album List:</h1>
<!-- albums ng-repeat -->
<div ng-repeat="album in albums.items | unique:'name'" id="{{album.id}}">
<img ng-src="{{album.images[1].url}}" width="100">
<!-- the action to translate the state to tracks view -->
<a ui-sref="albums.tracks({id : album.id})">{{album.name}}</a>
<!-- tracks view -->
<div ui-view></div>
</div>
主专辑控制器:
angular.module('spotifyAngularApp')
.controller('MainCtrl', function ($scope, spotifyService) {
var options = {
'limit': 10
};
$scope.searchAlbums= function () {
var sanitizeArtist = $scope.artist.split(' ').join('+');
$scope.searchedArtist = $scope.artist;
spotifyService.search(sanitizeArtist, 'album', options).then(function(data) {
$scope.albums = data.albums;
});
};
});
轨道控制器:
angular.module('spotifyAngularApp')
.controller('TracksCtrl', function ($scope, $stateParams, spotifyService) {
console.log($stateParams);
spotifyService.albumTracks($stateParams.id).then(function(data){
$scope.tracks = data.items;
});
});
【问题讨论】:
-
也许这对您来说很有趣:stackoverflow.com/a/24902144/1679310。有一个示例如何处理重复的场景...也许可以提供一些想法...
-
感谢您的参考,它可以工作,但是当您实例化新状态时,ui-router 会查找模板 url 和 ui-view。但我试图弄清楚如何在 ng-repeat 中添加一个 ui-view,其中包含另一个 ng-repeat。
-
你能创建 plunkr 吗,你在哪里找到了样本数据,它会更有帮助
-
如果原因只是为了将曲目视图的逻辑与专辑控制器分开。只需使用 ng-include 和 ng-controller 来跟踪视图的模板和控制器。此外,如果您想在页面加载时显示特定专辑的曲目(例如,根据 url 参数),您可以在专辑控制器中处理此显示/隐藏逻辑。
标签: javascript angularjs nested angularjs-ng-repeat angular-ui-router