使用angularjs1.x构建前台开发框架(七)——弹窗【一】
来源:互联网 发布:最好的网络推广平台 编辑:程序博客网 时间:2024/06/08 19:56
上一章介绍的掩膜主要介绍了自定义service在工程中的引用方式及使用用法,接下来在本章中以弹窗功能为例来介绍一下第三方组件作为一个service在工程中是如何引用和使用的。由于弹窗功能及延伸内容较多,因此会分成多篇文档来介绍。
下面先给出本章使用的第三方组件下载地址:
bootstrap在angularjs中的插件下载地址(笔者用的这个是2年前的版本了,有兴趣的同学可以换新版本试试):ui-bootstrap-tpls-0.11.0.min.js下载
bootstrap下载地址(笔者使用的是github上最新的3.3.7版本):bootstrap的github地址
下载完成后把代码放到我们的工程中,以下是更新后的项目代码结构图:
然后声明对第三方库的依赖:
1.在index.html中声明样式的依赖:
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="lib/bootstrap-3.3.7-dist/css/bootstrap.css"> <title>欢迎</title></head><body> <div id="menu" ng-controller="frameworkCtrl" ng-include="menus.url"></div> <div ui-view style="min-width: 1280px; max-width: 1440px; margin: 58px auto 0; border:1px solid #F00" ng-animate="{enter: 'fade-enter'}"></div> <script type="text/javascript" src="lib/require.js" data-main="main" charset="utf-8"></script></body></html>
新增代码如下:
在首页中声明该样式是考虑样式可以全局通用,即不同路由模块的弹出框都可以直接使用该样式而无需多次声明,但在实际的web开发中一般不建议这么做,当大量的css和js以这样的方式声明会增加首页的加载时间,进而影响用户体检。
2.在framework.js中声明对插件的依赖:
/** * Created by 李庆 on 2016/10/6. */define(["angular","angular-ui-router","../framework/config/frameworkConfig", "../framework/controller/frameworkCtrl","../framework/service/maskService", "ui-bootstrap-tpls-0.11.0.min"], function(angular,router,frameworkConfig,frameworkCtrl,maskService,uiBootstarp){ var dependency = [ "ng", "ui.router", frameworkConfig.name, "ui.bootstrap" ]; var framework = angular.module("framework",dependency); framework.controller("frameworkCtrl",frameworkCtrl); framework.service("maskService",maskService); return framework; });
新增代码如下:
也许有同学看到这里会问,我怎么知道我引用的第三方插件的模块名是什么呢?随便自定义的吗?当然不是,这个模块名在引用的插件里可以找到,比如在ui-bootstrap-tpls-0.11.0.min.js里:
在框架中声明对插件的依赖也是考虑可以全局通用,即不同路由模块的弹出框都可以直接使用插件而无需多次声明——这也正是框架的意义所在,通用的服务一般都建议在框架 中声明。
此时样式和插件都已经声明完成,我们可以尝试运行一下确认引用是否成功(在webstorm中选择chrome访问index.html),通常笔者这么说的时候一定会遇到坑——页面无法 正常显示了:
我们打开控制台看一下究竟发生了什么:
控制台的错误提示很明显了:我们使用的插件ui-bootstrap-tpls-0.11.0.min.js是需要依赖angular的,在回头到github上确认一发:
好了,问题确认了,下面给出问题的解决方案:
3.在main.js中声明插件对angular的依赖:
/** * Created by 李庆 on 2016/10/6. */var lan = "";var name = "lan=";var ca = document.cookie.split(";");for(var i=0;i<ca.length;i++){ var c = ca[i]; while(c.charAt(0) == " "){ c = c.substring(1); } if(c.indexOf(name) != -1){ lan = "../i18n/"+ c.substring(name.length, c.length)+"/language"; }}if(lan === ""){ lan = "../i18n/zh/language";}require.config({ "baseUrl":"lib", "paths":{ "angular":"angular", "jquery":"jquery-3.1.1", "angular-ui-router":"angular-ui-router", "language":lan }, "shim":{ "angular":{ "deps":["jquery"], "exports":"angular" }, "angular-ui-router":{ "deps":["angular"] }, "jquery":{ "exports":"$" }, "ui-bootstrap-tpls-0.11.0.min":{ "deps":["angular"] } }});require(["../framework/framework"],function(framework){ var injector = angular.bootstrap($("html"),[framework.name]);});
新增代码如下:
在尝试运行一下,可以看到页面恢复正常了:
接下来是在业务模块中定义一个具体的弹出框(本例中弹出框直接定义在框架module中):
在frameworkCtrl.js中定义弹出框函数:
/** * Created by 李庆 on 2016/10/6. */define(["language"],function(i18n){ var frameworkControl=["$rootScope","$scope","$modal",function($rootScope,$scope,$modal){ $rootScope.menus={ "url":"framework/views/menu.html" }; $scope.i18n = i18n; $scope.change = function(language){ var expires = new Date(9999,12,31).toUTCString(); document.cookie = "lan="+language+"; "+expires; location.reload(); }; $scope.modal = function(){ $modal.open({ templateUrl:"framework/views/modal.html" }); } }]; return frameworkControl;})
新增代码如下:
在menu.html中定义调用弹出框函数按钮:
<div style="min-width: 1280px; max-width: 1440px; margin: 58px auto 0; border:1px solid #F00"> <div> <ul> <li> <a ui-sref="login">login</a> </li> <li> <a ui-sref="c1">c1</a> </li> <li> <a ui-sref="c2">c2</a> </li> </ul> </div> <button>{{i18n.login_tip}}</button> <button ng-click="change('en')">english</button> <button ng-click="change('zh')">中文</button> <button ng-click="modal()">弹出框</button></div>
新增代码如下:
新增modal.html,定义弹出框视图:
<div style="width: 600px; height: 200px; border-radius: 4px"> <button ng-click="close()">关闭</button></div>
modal.html在工程中的位置:
最后运行一下并点击新增的弹出框按钮,可以看到一个最简单的弹出框已经可以正常显示,且在弹出框显示时,父页面有灰化效果:
至此,一个最简单的弹出框功能就完成了,同样,其他第三方组件引入基于angularjs的web工程也可以参考本章。
- 使用angularjs1.x构建前台开发框架(七)——弹窗【一】
- 使用angularjs1.x构建前台开发框架(一)——构建基础架构
- 使用angularjs1.x构建前台开发框架(八)——弹窗【二】
- 使用angularjs1.x构建前台开发框架(九)——弹窗【三】
- 使用angularjs1.x构建前台开发框架(二)——require的使用
- 使用angularjs1.x构建前台开发框架(三)——国际化
- 使用angularjs1.x构建前台开发框架(五)——掩膜的实现
- 使用angularjs1.x构建前台开发框架(六)——service的引用
- 使用angularjs1.x构建前台开发框架(十一)——数据双向绑定
- 使用angularjs1.x构建前台开发框架(十二)——脏检查
- 使用angularjs1.x构建前台开发框架(四)——模拟后台响应(打桩模块)
- 使用angularjs1.x构建前台开发框架(十)——一个完整第三方组件的引用
- 构建自己的C/C++插件开发框架(一)——初步设想
- 构建自己的C/C++插件开发框架(一)——初步设想
- 构建自己的C/C++插件开发框架(一)——初步设想
- AngularJS1.x学习(directive 中‘& ’‘=’ ‘@’符号的区别使用)
- 游戏开发笔记之七——基础动画显示(一)定时器的使用
- django前台开发框架
- 2.玩转Spring Boot 第一个应用Hello World
- 1014
- Java语言基础(六)之 —— 选择结构(switch语句)
- Android属性动画完全解析(上),初识属性动画的基本用法
- Unity中HideInInspector和SerializeField
- 使用angularjs1.x构建前台开发框架(七)——弹窗【一】
- 回溯法,并用回溯法请求0/1背包问题和皇后问题
- Java基础-synchronized使用
- 二叉树链表表示法
- ROS学习(四)机器人的移动与矫正
- 十六周—结构体练习
- SHA-256算法实现
- 我的下载资源整理(持续更新)
- 【模板】字符串哈希