angularjs+requirejs整合
通过requirejs的配置让angularJS可以正常运行。以下是配置的步骤:
环境需求
- require.js
- angular.js
有了这两文件,就可以进行下一步了,具体将文件放到哪个目录,可以跟项目的目录结构走,无所谓。
配置步骤
首先要配置require.js的入口文件main.js
require.config({
//配置angular的路径
paths:{
"angular":"js/angular",
},
//这个配置是你在引入依赖的时候的包名
shim:{
"angular":{
exports:"angular"
}
}
})
配置地址的时候容易出错,这里需要些耐心。
下一步是最关键的一步了,我在弄的时候被绕懵了好几次,英文网站上的教程用的名词容易分不清,英文不好是硬伤。。。
我们平常在写angular的时候是这样写的:
var app = angular.module("模块名",[]); app.controller("foo",function($scope){});
app.directive(...)
可以看到,几乎所有的操作都是在app上进行的。那么,在使用requirejs的时候,我们通常是这样写模块的:
define(["jquery"],function($){})
而两者结合起来理想中应该是这样的:
//ctrl.js
define(['app'],function(app){
app.controller("mainController",function($scope){
...
})
})
//dirct.js
define(['app'],function(app){
app.directive("xxx",function(scope){
...
})
})
可以看到,我们在编写controller和directive(或者service等等)的时候,都需要将方法作用在app
上,那么这个app是什么的呢,其实可以想到,
就是angular.module("模块名",[])
那么,如何让所有的模块都能引入angular.module("模块名",[])呢,我们新建一个app.js
define(["angular","angular-route"],function(angular){
return angular.module("模块名",[]);
})
这样,我们在引入app.js的时候,就可以拿到这个angular module了。
当这些步骤都做完之后,你会发现,这个程序还是跑步起来。所以我们还有最后一步。在启动一个angular程序的时候,需要把所有使用angularjs编写的模块都加载到页面中,要不然肯定会报错。。所以,我们需要一个angular的加载模块,这里我们可以在main.js里面添加
//main.js完整版
require.config({
//配置angular的路径
paths:{
"angular":"js/angular",
"ctrl:"js/ctrl",
"dirct":"js/dirct",
"app":"js/app"
},
//这个配置是你在引入依赖的时候的包名
shim:{
"angular":{
exports:"angular"
}
}
});
require(["angular","ctrl","dirct","app"], function(angular) { angular.bootstrap(document,["app"]); });
angular.bootstrap
方法是angular自带的,顾名思义,如果手工去调用,就是启动一个angular app的意思。具体看文档。
这样,在你的页面中引入<script src="js/require.js" data-main="js/main.js"></script>,就可以运行angular程序了!
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My AngularJS AngularJS + RequireJS App</title>
<link rel="stylesheet" href="css/app.css">
</head>
<body>
<ul class="menu">
<li><a href="#/view1">view1</a></li>
<li><a href="#/view2">view2</a></li>
</ul> <div data-ng-view></div> <div>Angular Require seed app: v<span app-version></span></div> <script src="js/require.js" data-main="js/main.js"></script>
</body>
</html>
以上需要注意的地方:
1、index.html页面不要添加ng-app指令,否则会报错,详情请参考angularjs的加载流程,使用require.js时推荐使用angularjs手动加载方式
angular.bootstrap(document,["app"],不用使用自动加载;
2、如上配置完之后,页面的加载会有闪烁,于是将模板中的{{xxx}}都改成了ng-bind的形式。改完了之后从页面渲染完到angular将数据填充完毕的那几百毫秒还是会闪一下。于是我想出了个hack,就是现在body或者某父标签上加一个class这个class是负责visibility:hidden
的。等到angular把数据填充完毕,再用jQuery把那个class remove掉,这样就不会有闪烁了,进来先是空白的,然后一下子出来,也比较符合平常的用户习惯。
参考文档:http://www.startersquad.com/blog/angularjs-requirejs/
angularjs+requirejs整合的更多相关文章
- 前端angularjs+requirejs+dhtmlx 后端asp.net webapi
享一个前后端分离方案源码-前端angularjs+requirejs+dhtmlx 后端asp.net webapi 一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家 ...
- AngularJS+requireJS项目的目录结构设想
AngularJS+requireJS项目的目录结构设想 准备用AngularJS + require.js 作为新项目的底层框架,以下目录结果只是一个初步设想: /default 放页面,不过 ...
- AngularJS + RequireJS
http://www.startersquad.com/blog/AngularJS-requirejs/ While delivering software projects for startup ...
- 新建一个angularjs+requirejs+bootstrap+typescript+gulp+vscode+git的项目
环境 windows 10 准备工具 Visual Studio Code Node.js Git 需求 必须支持IE8 步骤开始: 执行命令行工具 mkdir Demo && cd ...
- 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi
一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...
- angularJS+requireJS并集成karma测试实践
最近在为下一个项目做前端技术选型,Angular是必须要用的(BOSS指定,个人感觉也不错,开发效率会很高).由于需要加载的JS很多,所以打算看看angular和requirejs一起用会怎么样.在g ...
- AngularJS+RequireJs实现动态加载JS和页面的方案研究【上】
1.入口页面 存放地址:src/main/webapp/WEB-INF/view/workflow/workflow.jsp [html] view plain copy 在CODE上查看代码片派生到 ...
- angularJS+requireJS实现controller及directive的按需加载
最近因为项目的比较大,需要加载的js文件较多,为了提高首屏页面的加载速度,需要对js文件进行按需加载,然后网上参考了一些资料,自己也深入研究一番之后,实现了按需加载控制器js文件及指令js文件的效果: ...
- requirejs整合ztree
{block name='script'} <script> require(['jquery.ztree'], function () { var zTreeObj; var setti ...
随机推荐
- 7月17号day9总结
今天学习过程和小结 今天学习了如何使用idea操作hdfs. public class HDFSTest { Configuration configuration; FileSystem ...
- remove computer from join with powershell
Removes the local computer from its domain. Remove-Computer [-UnjoinDomainCredential] <PSCredenti ...
- 有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别
一:前言 在自己获取属性时,碰见了XX.class.getResourceAsStream(fileName),自己对这个其实不是很理解,上网查了下资料,又看到了上述的几个,所以就研究了下. 二:内容 ...
- bzoj 1016 深搜
首先我们知道MST的一些性质,对于这道题来说就是,假设我们先求出一颗MST设为G,由已知边权相同的边最多会有10条,那么假设我们在这10条边中选取size条边∈G,那么我们在这边权相同的边集E中任意选 ...
- netsh winsock reset 命令并回车
1. Win+R 打开运行窗口,输入 CMD 并确认打开命令行窗口.2. 在命令行窗口输入 netsh winsock reset 命令并回车,待提示重启计算机时,重启计算机
- Codeforces #107 DIV2 ABCD
A #include <map> #include <set> #include <list> #include <cmath> #include &l ...
- springmvc对于前台date类型注意点
springmvc,可以自动将数据注入到: “name”值相同,便注入,比如String Integer 还有我们自定义的bean,比如User. 但是date类型的数据,如果前台传的是用" ...
- jQuery,月历,左右点击事件实现月份的改变
html页面: <div class="recordbriefing-title-top-body"> <span class="record-left ...
- jquerycheckbox事件
https://stackoverflow.com/questions/7031226/jquery-checkbox-change-and-click-event $(document).ready ...
- springBoot Feign Hystrix Dashboard
1.引入依赖 <!-- 引入关于 hystrix Dashboard的依赖 --> <dependency> <groupId>org.springframewor ...