基于Bootstrap+angular的一个豆瓣电影app

1、搭建项目框架

npm初始化项目

npm init -y   //按默认配置初始化项目

安装需要的第三方库

npm install bootstrap angular angular-route --save

新建一个index.html页面 引用 这三个依赖库

新建两个文件夹coming_soon in_theaters

然后在这两个文件夹里分别创建一个controller.js 文件和view.html文件

最后项目文件的结构是这样

2、搭建首页样式

采用bootstrap

http://v3.bootcss.com/examples/dashboard/

该页面的样式

然后还需要引用这一个css文件

http://v3.bootcss.com/examples/dashboard/dashboard.css

然后删掉一些不需要的标签

最后形成的界面

到这边后,项目的基本结构与样式搭建完成

3、配置angular路由

到in_theaters下的controller.js文件中 写上

(function(angular){
    ‘use strict‘;
    var module = angular.module(‘movie.in_theaters‘,[‘ngRoute‘]);
    module.config([‘$routeProvider‘,function($routeProvider){
        $routeProvider.when(‘/in_theaters‘,{
            controller: ‘inTheatersController‘,
            templateUrl: ‘/in_theaters/view.html‘
        });
    }]);
    module.controller(‘inTheatersController‘,[‘$scope‘,function($scope){

    }]);
})(angular);

在view.html写上

<h1 class="page-header">正在热映</h1>

到coming_soon下的controller.js 写上

(function(angular){
    ‘use strict‘;
    var module = angular.module(‘movie.coming_soon‘,[‘ngRoute‘]);
    module.config([‘$routeProvider‘,function($routeProvider){
        $routeProvider.when(‘/coming_soon‘,{
            controller: ‘comingSoonController‘,
            templateUrl: ‘/coming_soon/view.html‘
        });
    }]);
    module.controller(‘comingSoonController‘,[‘$scope‘,function($scope){

    }]);
})(angular);

在view.html写上

<h1 class="page-header">即将上映</h1>

然后在js文件夹中新建一个app.js 写上

(function (angular) {
    ‘use strict‘;
    var module = angular.module(‘movie‘, [‘ngRoute‘, ‘movie.in_theaters‘,‘movie.coming_soon‘ ]);
    module.config([‘$routeProvider‘, function ($routeProvider) {
        $routeProvider.otherwise({
            redirectTo: ‘/in_theaters‘
        });
    }]);
})(angular);

最后在index.html页面 body标签加上指令

<body ng-app="movie">

在内容显示模块中加上ng-view指令

<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main" ng-view>

</div>

引用app.js

 <script src="/js/app.js"></script>

最后浏览index.html

说明一切配置正常

4、豆瓣API

豆瓣API开发者文档

https://developers.douban.com/wiki/?title=movie_v2

这边采用jsonp方式获取数据、

由于angular的jsonp方式豆瓣不支持、所以这边自己封装了一个jsonp组件

新建一个components文件夹、在该文件夹下创建http.js文件 写上

(function (angular) {
    ‘use strict‘;
    var http = angular.module(‘movie.http‘, []);
    http.service(‘HttpService‘, [‘$window‘, ‘$document‘, function ($window, $document) {
        this.jsonp = function (url, data, callback) {
            var cbFuncName = ‘jsonp_fun‘ +Math.random().toString().replace(‘.‘, ‘‘);
            $window[cbFuncName] = callback;
            var queryString = url.indexOf(‘?‘) == -1 ? ‘?‘ : ‘&‘;
            for (var key in data) {
                queryString += key + ‘=‘ + data[key] + ‘&‘;
            }
            queryString += ‘callback=‘ + cbFuncName;
            var script = document.createElement(‘script‘);
            script.src = url + queryString;
            $document[0].body.appendChild(script);
        }
    }]);
})(angular);

然后在in_theaters文件夹下的controller.js添加对movie.http模块的依赖,并通过jsonp请求数据封装到$scope.data中

(function (angular) {
    ‘use strict‘;
    var module = angular.module(‘movie.in_theaters‘, [‘ngRoute‘, ‘movie.http‘]);
    module.config([‘$routeProvider‘, function ($routeProvider) {
        $routeProvider.when(‘/in_theaters‘, {
            controller: ‘inTheatersController‘,
            templateUrl: ‘/in_theaters/view.html‘
        });
    }]);
    module.controller(‘inTheatersController‘, [‘$scope‘, ‘HttpService‘, function ($scope, HttpService) {
        console.log(HttpService);
        HttpService.jsonp(‘http://api.douban.com/v2/movie/in_theaters‘, {
            count: 10,
            start: 0
        }, function (data) {
            $scope.data = data;
            $scope.$apply();
            console.log(data);
        });
    }]);
})(angular);

然后在对应的view.html中修改成

<h1 class="page-header">{{data.title}}</h1>
<div class="list-group">
    <a href="{{item.alt}}" class="list-group-item" ng-repeat="item in data.subjects">
        <span class="badge">{{item.rating.average}}</span>
        <div class="media">
            <div class="media-left">
                <img class="media-object" ng-src="{{item.images.small}}" alt="">
            </div>
            <div class="media-body">
                <h3 class="media-heading">{{item.title}}</h3>
                <p>类型:<span>{{item.genres.join(‘、‘)}}</span></p>
                <p>导演:<span ng-repeat="d in item.casts">{{d.name +($last?‘‘:‘、‘)}}</span></p>
            </div>
        </div>
    </a>
</div>

对应的也在coming_soon文件夹下的controller.js中修改

(function(angular){
    ‘use strict‘;
    var module = angular.module(‘movie.coming_soon‘,[‘ngRoute‘,‘movie.http‘]);
    module.config([‘$routeProvider‘,function($routeProvider){
        $routeProvider.when(‘/coming_soon‘,{
            controller: ‘comingSoonController‘,
            templateUrl: ‘/coming_soon/view.html‘
        });
    }]);
    module.controller(‘comingSoonController‘,[‘$scope‘,‘HttpService‘,function($scope,HttpService){
        HttpService.jsonp(‘http://api.douban.com/v2/movie/coming_soon‘,{
            count:10,
            start:0
        },function(data){
            $scope.data=data;
            $scope.$apply();
        });
    }]);
})(angular);

对应的view.html 修改成

<h1 class="page-header">{{data.title}}</h1>
<div class="list-group">
    <a href="{{item.alt}}" class="list-group-item" ng-repeat="item in data.subjects">
        <span class="badge">{{item.rating.average}}</span>
        <div class="media">
            <div class="media-left">
                <img class="media-object" ng-src="{{item.images.small}}" alt="">
            </div>
            <div class="media-body">
                <h3 class="media-heading">{{item.title}}</h3>
                <p>类型:<span>{{item.genres.join(‘、‘)}}</span></p>
                <p>导演:<span ng-repeat="d in item.casts">{{d.name +($last?‘‘:‘、‘)}}</span></p>
            </div>
        </div>
    </a>
</div>

最后别忘了在index.html最后引用

<script src="/components/http.js"></script>

最后展示的效果为

项目到这边已经完成的差不多了

时间: 2024-10-27 01:45:52

基于Bootstrap+angular的一个豆瓣电影app的相关文章

基于vue2.0的一个豆瓣电影App

1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie 然后一路回车 接着 进入项目目录 cd vue-movie 然后安装项目依赖包 cnpm install 没安装cnpm的先执行这个命令 npm install -g cnpm --registry=https://registry.npm.taobao.org 接着 npm run dev 看到

从零开始写个一个豆瓣电影 (小程序教程1)

微信小程序内测至今也有20天左右,也有很多人作出了很多不错的DEMO并发布到github了.前几日看见了豆瓣电影这个demo,感觉很不错,也跟着做了一个,作为复习巩固文档API用. 废话不多说,直接进入正题: 第一节只写一个首页的展示,数据用的是自己写的虚拟的数据 新建一个demo,不要使用微信自带的DEMO,直接从零开始写起: 首先创建3个文件: app.json app.js apps.wxss app.json  : 主要写配置项:内容如下,具体的每个key值对应的意思,这里就不再细说了,

微信小程序豆瓣电影项目的改造过程经验分享

在学习微信小程序开发过程中,一部分的难点是前端逻辑的处理,也就是对前端JS的代码编辑:一部分的难点是前端界面的设计展示:本篇随笔基于一个豆瓣电影接口的小程序开源项目进行重新调整,把其中遇到的相关难点和改进的地方进行讨论介绍,希望给大家提供一个参考的思路,本篇随笔是基于前人小程序的项目基础上进行的改进,因此在开篇之前首先对原作者的辛劳致敬及感谢. 1.豆瓣电影接口的小程序项目情况 豆瓣电影接口提供了很多相关的接口给我们使用,豆瓣电影接口的API地址如下所示:https://developers.d

web多终端开发学习系列(三)--- 基于bootstrap的表格插件bootstrap-table

基于网页管理系统的开发大多数功能只是对数据的显示与操作,对于数据的显示一般都是通过table表格来显示,所以管理系统的开发很有必要引入表格插件,对于sencha touch等商业化框架,都有自己自带的表格控件,而对于bootstrap需要引入第三方的表格插件,这里我学习下bootstrap table. 介绍 bootstrap table是基于bootstrap框架的一个表格插件,官网地址是http://wenzhixin.net.cn/p/bootstrap-table/docs/index

[AngularJS] 仿照Angular Bootstrap TimePicker创建一个分钟数-秒数的输入控件(minuteSecondPicker)

在一个项目中需要一个用来输入分钟数和秒数的控件,然而调查了一些开源项目后并未发现合适的控件.在Angular Bootstrap UI中有一个类似的控件TimePicker,但是它并没有深入到分钟和秒的精度. 因此,决定参考它的源码然后自己进行实现. 最终的效果如下: 首先是该directive的定义: app.directive('minuteSecondPicker', function() { return { restrict: 'EA', require: ['minuteSecond

用Vue.js来开发一个电影App的前端部分

我们要构建一个什么样的App? 我们大多数人使用在线流媒体服务(如Netflix)观看我们最喜欢的电影或者节目.这篇文章将重点介绍如何通过使用vue.js 2建立一个类似风格的电影流媒体WEB交互界面(见上图). 最终的产品可以去这里找:https://codepen.io/itslit/full/mvvjzr. 尽管Bulma将作为应用的CSS框架,但是本文将主要集中在Vue.js的使用和浏览CSS式样,如果你想跟着学,我设置了一个可以作为开始学习的地方,所有自定义组合,初始数据对象和必要的需

开源一个基于天天团购的团购app

可能大家都知道天天团购开源系统,一个做团购的开源项目很赞,前些日子做了基于天天团购系统做的团购客户端和移动端服务器!源代码放出,有了解的可以看看,希望收益! 先说服务器:app的服务器,基于天天团购的数据库重新暴漏的移动端的接口,基于http协议,客户端通过post传值,服务器拿到数据,解析执行,然后json_encode,返回!天天团购的php代码写的实在太多抽象,也许是自己php代码时间不长的原因,总之并没有基于他的系统来做,而是基于数据库来做,介绍下最基本的几个表,cenwor_syste

基于Spark和Hive进行的豆瓣电影数据分析

写在前边的话: 算是自己做的一个小课题吧,自己搭建平台,自己爬取数据,自己进行数据清洗和分析,自己进行可视化展示,写这篇博客不为别的,只是记录下自己做这个课题的整个过程,大神们勿喷 环境说明:hadoop2.7集群,包含Hbase,Hive,Spark,Sqoop,Mahout组件 过       程:平台部署->数据采集-> 数据存储->数据ETL->数据分析->可视化 课题github地址:https://github.com/Thinkgamer/Douban_Movi

一个基于bootstrap的菜单

原文:一个基于bootstrap的菜单 源代码下载地址:http://www.zuidaima.com/share/1550463638506496.htm 效果如下: