var app = angular.module('app', ['ui.router']); /*$rootScope的相关配置*/ app.run(['$rootScope', function($rootScope){ $rootScope.version = '0.1'; $rootScope.author = 'vczero'; $rootScope.author_alias = '鬼谣'; $rootScope.isNoLoaded = true; $rootScope.bookList = []; //当然这是个不好的做法,只因为APP太simple $rootScope.musicList = []; $rootScope.movieList = []; $rootScope.keywordsObj = { book: '', music: '', movie: '' }; }]); /*服务的URL配置*/ app.constant('ServiceConfig', { book_search: 'https://api.douban.com/v2/book/search', book_search_id: 'https://api.douban.com/v2/book/', music_search: 'https://api.douban.com/v2/music/search', music_search_id: 'https://api.douban.com/v2/music/', movie_search: 'https://api.douban.com/v2/movie/search', movie_search_id: 'https://api.douban.com/v2/movie/subject/' }); app.config(['$stateProvider', '$urlRouterProvider',function($stateProvider, $urlRouterProvider){ /*URL路由*/ $urlRouterProvider.otherwise("/"); /*状态配置*/ $stateProvider //首页 .state('index',{ url: '/', views:{ header:{ templateUrl: '../html/views/list_header.html', controller: 'SearchController' }, container:{ templateUrl: '../html/views/list_book.html', controller: 'BookListController' }, footer:{ templateUrl: '../html/views/list_footer.html', controller: '' } } }) //book list .state('book_list',{ url: '/book', views:{ header:{ templateUrl: '../html/views/list_header.html', controller: 'SearchController' }, container:{ templateUrl: '../html/views/list_book.html', controller: 'BookListController' }, footer:{ templateUrl: '../html/views/list_footer.html', controller: '' } } }) // book detail .state('book_detail',{ url: '/book/:id', views:{ header:{ templateUrl: '../html/views/list_header.html', controller: 'SearchController' }, container:{ templateUrl: '../html/views/detail_book.html', controller: 'BookDetailController' }, footer:{ templateUrl: '../html/views/list_footer.html', controller: '' } } }) // music list .state('music_lsit',{ url: '/music', views:{ header:{ templateUrl: '../html/views/list_header.html', controller: 'SearchController' }, container:{ templateUrl: '../html/views/list_music.html', controller: 'musicListController' }, footer:{ templateUrl: '../html/views/list_footer.html', controller: '' } } }) // movie list .state('movie_lsit',{ url: '/movie', views:{ header:{ templateUrl: '../html/views/list_header.html', controller: 'SearchController' }, container:{ templateUrl: '../html/views/list_movie.html', controller: 'movieListController' }, footer:{ templateUrl: '../html/views/list_footer.html', controller: '' } } }) .state('search',{ url: '/search/:type', views:{ header:{ templateUrl: '../html/views/search.html', controller: 'Search' }, container:{ templateUrl: '', controller: '' }, footer:{ templateUrl: '', controller: '' } } }); }]); ; app.directive('loading', function(){ var str = '
'; return { restrict: 'AE', template: str, replace: true }; }); ; app.directive('tip', function(){ var str = '
'; return { restrict: 'AE', template: str, replace: true }; }); ;/*构建BookList服务*/ app.factory('bookList', ['$rootScope', '$http', 'ServiceConfig', function($rootScope, $http, ServiceConfig){ $rootScope.isNoLoaded = true; var _BookList = { getData: function(keywords){ $rootScope.isNoLoaded = true; $http.jsonp(ServiceConfig.book_search + '?callback=searchBookList&count=10&q=' + keywords); window.searchBookList = function(data){ if(data.books.length){ $rootScope.isNoLoaded = false; } var list = []; for(var i = 0; i < data.books.length; i++){ var book = data.books[i]; var item = { id: book.id, image: book.image, origin_title: book.title || '书名未共享', author: book.author[0] || '作者未知', publisher: book.publisher || '出版社未知', price: book.price.split('.')[0] || '未知', pages: book.pages }; list.push(item); } $rootScope.bookList = list; }; } }; return _BookList; }]);;/*构建movieList服务*/ app.factory('movieList', ['$rootScope', '$http', 'ServiceConfig', function($rootScope, $http, ServiceConfig){ $rootScope.isNoLoaded = true; var _MovieList = { getData: function(keywords){ $rootScope.isNoLoaded = true; $http.jsonp(ServiceConfig.movie_search + '?callback=movieSearch&count=5&q=' + keywords); window.movieSearch = function(data){ $rootScope.isNoLoaded = false; if(data.subjects && data.subjects.length){ $rootScope.movieList = data.subjects; } console.log(data.subjects); }; } }; return _MovieList; }]);;/*构建musicList服务*/ app.factory('musicList', ['$rootScope', '$http', 'ServiceConfig', function($rootScope, $http, ServiceConfig){ $rootScope.isNoLoaded = true; var _MusicList = { getData: function(keywords){ $rootScope.isNoLoaded = true; $http.jsonp(ServiceConfig.music_search + '?callback=musicSearch&count=10&q=' + keywords); window.musicSearch = function(data){ $rootScope.isNoLoaded = false; if(data.musics && data.musics.length){ $rootScope.musicList = data.musics; } }; } }; return _MusicList; }]);;/*初始化图书列表页*/ app.controller('BookListController', ['$rootScope', 'bookList',function($rootScope, bookList){ if(!$rootScope.keywordsObj.book){ $rootScope.keywordsObj.book = 'C语言'; } bookList.getData($rootScope.keywordsObj.book); }]); /*图书详情页*/ app.controller('BookDetailController', ['$rootScope', '$http', '$scope', '$location', 'ServiceConfig',function($rootScope, $http, $scope, $location, ServiceConfig){ var bookId = $location.path().split('/book/')[1] || ''; $rootScope.isNoLoaded = true; $http.jsonp(ServiceConfig.book_search_id + '' + bookId + '?callback=showBookDeatil'); window.showBookDeatil = function(data){ $rootScope.isNoLoaded = false; $scope.data = data; }; }]);;app.controller('MenuController', ['$scope', '$location',function($scope, $location){ $scope.bookSearch = function(){ $location.path('/book'); }; $scope.musicSearch = function(){ $location.path('/music'); }; $scope.movieSearch = function(){ $location.path('/movie'); }; }]);;/*初始化的结果*/ app.controller('movieListController', ['$rootScope', 'movieList',function($rootScope, movieList){ if(!$rootScope.keywordsObj.movie){ $rootScope.keywordsObj.movie = '幸福'; } movieList.getData($rootScope.keywordsObj.movie); }]);; /*初始化的结果*/ app.controller('musicListController', ['$rootScope', 'musicList',function($rootScope, musicList){ if(!$rootScope.keywordsObj.music){ $rootScope.keywordsObj.music = '刘德华'; } musicList.getData($rootScope.keywordsObj.music); }]); ;/*负责搜索结果的导向*/ var Search = function($scope, $rootScope, $location, bookList, musicList, movieList){ var path = $location.path(); $rootScope.isNoLoaded = false; // document.getElementById('search_input').focus(); //跳回列表页 $scope.search = function(){ var keywords = $scope.keywords; if(path.indexOf('/book') !== -1){ if(keywords){ $rootScope.keywordsObj.book = keywords; } $location.path('/book'); }else if(path.indexOf('/music') !== -1){ if(keywords){ $rootScope.keywordsObj.music = keywords; } $location.path('/music'); }else if(path.indexOf('/movie') !== -1){ if(keywords){ $rootScope.keywordsObj.movie = keywords; } $location.path('/movie'); } }; }; Search.$inject = ['$scope', '$rootScope', '$location', 'bookList', 'musicList', 'movieList']; app.controller('Search', Search);;/*仅负责搜索页面的打开*/ var SearchController = function($scope, $rootScope, $location){ var path = $location.path(); $scope.goToSearch = function(){ if(path.indexOf('/book') !== -1 || path === '/'){ $location.path('/search/book'); }else if(path.indexOf('/music') !== -1 || path === '/music'){ $location.path('/search/music'); }else if(path.indexOf('/movie') !== -1 || path === '/movie'){ $location.path('/search/movie'); } }; }; SearchController.$inject = ['$scope', '$rootScope', '$location']; app.controller('SearchController', SearchController);