【发布时间】:2016-01-01 09:25:39
【问题描述】:
This question 与我的要求类似,我已经实现了其中的一些代码。我正在使用 UI-Router,但我的主要问题是 $http 请求并将数据从服务传递到控制器。基本上我想从上一页点击的专辑中显示专辑的详细信息。
我真的只需要服务和控制器方面的帮助。 HTML 仅供参考/上下文。
对不起,如果这很难理解。如果您需要澄清,请发表评论。
Here 是 GitHub 的链接
相册 HTML
<main class="album-view container narrow">
<section class="clearfix">
<div class="column half">
<img ng-src="{{album.albumArtUrl}}" class="album-cover-art">
</div>
<div class="album-view-details column half">
<h2 class="album-view-title">{{album.name}}</h2>
<h3 class="album-view-artist">{{album.artist}}</h3>
<h5 class="album-view-release-info">{{album.year}} | {{album.label}}</h5>
</div>
</section>
<table class="album-view-song-list">
<tr class="album-view-song-item" ng-repeat="song in album.songs">
<td class="song-item-number" data-song-number="{{$index + 1}}">{{$index + 1}}</td>
<td class="song-item-title">{{song.name}}</td>
<td class="song-item-duration">{{song.length}}</td>
</tr>
</table>
应用配置
var blocJams = angular.module("blocJams", ["ui.router"]);
blocJams.config(function($stateProvider, $locationProvider){
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
$stateProvider
.state('album', {
url: '/album/:albumId',
controller: 'AlbumController',
templateUrl: '../templates/album.html'
});
});
专辑服务(http 获取 json)
.service("albumsService", ["$http", function ($http) {
var model = this;
model.collection = $http.get("/data/albums.json");
model.getCollection = function() {
return model.collection;
};
model.getAlbumAt = function(_id) {
model.getCollection();
return filterFilter(model.collection, {
id: _id
})[0];
};
}])
相册控制器
.controller('AlbumController', ["$scope", "albumsService", "$stateParams", function ($scope, albumsService, $stateParams) {
albumsService.collection.then(function (albums) {
//$scope.album = albumsService.getAlbumAt($stateParams.albumId);
$scope.album = albums.data[0];
});
}]);
【问题讨论】:
-
服务是单例的,因此您不需要“传递”值并在每个新视图中调用服务。
-
使用
$stateParams.albumId在当前路由或实时api中查找特定id的请求
标签: json angularjs angular-ui-router getjson ng-repeat