详解基于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 相关文章推荐
js 通用javascript函数库整理
Aug 14 Javascript
用Javascript获取页面元素的具体位置
Dec 09 Javascript
javascript进行数组追加方法小结
Jun 16 Javascript
jQuery中on()方法用法实例
Jan 19 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
jQuery获取剪贴板内容的方法
Jun 16 Javascript
微信小程序 小程序制作及动画(animation样式)详解
Jan 06 Javascript
JS实现的二叉树算法完整实例
Apr 06 Javascript
微信小程序 rich-text的使用方法
Aug 04 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
Oct 17 Javascript
如何用webpack4带你实现一个vue的打包的项目
Jun 20 Javascript
解决vue项目打包后提示图片文件路径错误的问题
Jul 04 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反弹shell实现代码
2009/04/22 PHP
一步一步学习PHP(6) 面向对象
2010/02/16 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php简单生成随机数的方法
2015/07/30 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
javascript 常用功能总结
2012/03/18 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
python备份文件的脚本
2008/08/11 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
学术会议欢迎词
2014/01/09 职场文书
节电标语大全
2014/06/23 职场文书
销售竞赛活动方案
2014/08/23 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
自主招生自荐信格式
2015/03/04 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL