详解基于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 相关文章推荐
关于hashchangebroker和statehashable的补充文档
Aug 08 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
jQuery的ready方法详解
Nov 27 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
Jun 09 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
详解JavaScript 中 if / if...else...替换方式
Jul 15 Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
Sep 03 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(3) php 函数
2010/02/15 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
JQuery动画和停止动画实例代码
2013/03/01 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
python框架中flask知识点总结
2018/08/17 Python
tensorflow 查看梯度方式
2020/02/04 Python
Python常用类型转换实现代码实例
2020/07/28 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
Python类成员继承重写的实现
2020/09/16 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
中学老师的自我评价
2013/11/07 职场文书
考试不及格的检讨书
2014/01/22 职场文书
学校消防演习方案
2014/02/19 职场文书
年度考核自我鉴定
2014/03/19 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏