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


Posted in Javascript onJune 26, 2017

1、搭建项目框架

npm初始化项目

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

安装需要的第三方库

npm install bootstrap angular angular-route --save

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

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

新建两个文件夹coming_soon in_theaters

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

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

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

2、搭建首页样式

采用bootstrap

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

该页面的样式

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

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

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

最后形成的界面

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

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

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

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

说明一切配置正常

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}}" rel="external nofollow" rel="external nofollow" 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}}" rel="external nofollow" rel="external nofollow" 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>

最后展示的效果为

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ie下动态加态js文件的方法
Sep 13 Javascript
jQuery获得子元素个数的方法
Apr 14 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
JS实现列表的响应式排版(推荐)
Sep 01 Javascript
JS库之Highlight.js的用法详解
Sep 13 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 Javascript
angularJs利用$scope处理升降序的方法
Oct 08 Javascript
使用pm2自动化部署node项目的方法步骤
Jan 28 Javascript
JavaScript中的this原理及6种常见使用场景详解
Feb 14 Javascript
jQuery回调方法使用示例
Jun 26 #jQuery
Iscrool下拉刷新功能实现方法(推荐)
Jun 26 #Javascript
js 简易版滚动条实例(适用于移动端H5开发)
Jun 26 #Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 #Javascript
浅谈JS如何实现真正的对象常量
Jun 25 #Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
Jun 25 #Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
Jun 25 #Javascript
You might like
一个比较简单的PHP 分页分组类
2009/12/10 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
Views rows style模板重写代码
2011/05/16 PHP
Yii框架form表单用法实例
2014/12/04 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
Python注释详解
2016/06/01 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
酒店公关部经理岗位职责
2013/11/24 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
三年级学生期末评语
2014/12/26 职场文书
2015年度党员个人总结
2015/02/14 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python