angularjs 手动启动
谷歌推的javascript框架angulajs相当火热,由于新项目的缘故,最近一直看angularjs。在看的时候,一直有个疑问,angularjs 核心依赖于DI(依赖注入)。常用的方法是在页面的根节点加入一个ng-app或者ng-app='module',来进入的angulajs 的context(上下文),然后DI来注入,生成一个link函数,一个事件循环。但是啊,在做大项目的时候,往往不会在dom初始化的时候加入ng-app,因为这就约束了一个页面只有一个module,有的时候我们可能想跟灵活一些,怎么做呢?
官网有云:同过angualrjs 的bootstrap api 来引导程序入口。因为我也是新手,对angualjs 的整个流程也不能十分全面的把控,所以我就按照官网一步一步来。但是官网只有一段代码
angualr.element(document).ready(function(){angular.module('mymodule',[]);angular.bootstrap(document,['mymodule']);}
这就难为坏了我了,我在项目里千方百计的使用却一直报错,而且错误提示也是相当的槽糕。就开始google,但是一点收获也没有,我的代码引用了官网的一个例子
<!DOCTYPE html>
<html ng-app id='ng-app' lan='en'>
<header>
<!--[if lte IE 7]>
<script src="js/json3.js"></script>
<![endif]-->
<!--[if lte IE 8]>
<script>
document.createElement('ng-include');
document.createElement('ng-pluralize');
document.createElement('ng-view'); // Optionally these for CSS
document.createElement('ng:include');
document.createElement('ng:pluralize');
document.createElement('ng:view');
</script>
<![endif]-->
<script type="text/javasctipt" src='angular.min.js' />
<script >
angular.element(document).ready(function(){
angular.module('docsTimeDirective', [])
.controller('Ctrl2',['$scope',function($scope) {
$scope.format = 'M/d/yy h:mm:ss a';
}])
.directive('myCurrentTime',function($interval,dateFilter){
function link(scope, element, attrs) {
var format,
timeoutId; function updateTime() {
element.text(dateFilter(new Date(), format));
} scope.$watch(attrs.myCurrentTime, function(value) {
format = value;
updateTime();
}); element.on('$destroy', function() {
$interval.cancel(timeoutId);
}); // start the UI update process; save the timeoutId for canceling
timeoutId = $interval(function() {
updateTime(); // update DOM
}, 1000);
} return {
link: link
};
});
angular.bootstrap(document,['docsTimeDirective']); })
</script>
</header>
<body>
<div ng-controller="Ctrl2">
Date format: <input ng-model="format"> <hr/>
Current time is: <span my-current-time="format"></span>
</div>
</body> </html>
乍一看,一直没有发现错误。后来在不断的捣鼓angularjs 的核心的流程,我终于明白了错误在哪里了。应该去掉doem 里的ng-app,因为手动引导就是通过bootstrap 来配置$injector。 在弄个ng-app,两个入口,造成了anguar 的异常。
虽然过程很坎坷,但结局很美好,还深刻的理解了angularjs 的核心流程。
猜测,有待验证
目前认为,这个手动引导的最大好处就是可以定义多个module,在上面的文档里说过,angualr.module('myfirst',[]),其api中的module第二个参数是他的依赖module,所以你可以定义多个module,比如你需要做ui,可以写一个ui,module,然后这个是可以share的,当你在页面加载的时候,只要把页面要用的module ,传到angular.bootstrap(document,['myfirst'])第二个参数,然后就可以了。!
续:官网有这么一句话
A module is a collection of configuration and run blocks which get applied to the application during the bootstrap process.
意思是说module 是配置的一个集合,是在anguar 引导(bootstrap)运行时的所依赖运行块。这个足可以验证了我的猜想!
angularjs 手动启动的更多相关文章
- AngularJS的启动引导过程
原文:http://www.angularjs.cn/A137?utm_source=ourjs.com 目录: 引导之前 自动引导启动框架 手工引导启动框架 引导第1步:创建注入器 引导第2步:创建 ...
- Oracle 服务手动启动关闭
在windows7中安装完Oracle11g之后会出现一下七种服务:可通过运行->services.msc查看. 其中各个服务名称中的ORCL或orcl为SID即System IDentifie ...
- 手动启动mongodb和nodejs程序
最近做单片机去了,以前用的mongodb和nodejs没有配置成服务,居然忘了如何手动启动.在此记录下 一.手动启动mongodb 1.进入cmd 2.在dos下打开mongodb路径E:\mongo ...
- 解决关于ArcGIS10.2服务手动启动的问题
解决关于ArcGIS10.2服务手动启动的问题 C:\program files\arcgis\license10.2\bin> lmgrd -z -c service.txt新建一文本,将上面 ...
- arcgis手动启动服务提示端口4000被使用
具体解决办法 参考 http://hi.baidu.com/xjx19860908/item/6b46376d92044694c4d249f6该博文. 手动启动,提示4000端口被占用,去查找4000 ...
- 关于sql server 2008过期导致 MSSQLSERVER服务就无法启动,手动启动就报告错误代码17051。
1.基本现象:MSSQLSERVER服务就无法启动,手动启动就报告17051错误. 2.解决办法: 第一步:进入SQL2008配置工具中的安装中心, 第二步:再进入维护界面,选择版本升级, 第三步:进 ...
- oracle手动启动服务
开始-控制面板->管理工具->服务->右键属性 oracle服务设定都是手动启动的,开机时只需要启动3个服务就好了: OracleOraDb11g_home1ClrAgent Ora ...
- 手动启动angular
关于手动启动 angular 的问题 angular核心原理解析1:angular自启动过程 angular.element(document).ready(function() { angular. ...
- 手动启动jenkins
无论Linux还是windows, jenkins都是作为一个后台服务存在的. 所以在Linux下,手动启动或停止jenkins: service jenkins start service jenk ...
随机推荐
- GPU bubbles
https://software.intel.com/en-us/articles/performance-analysis-and-optimization-for-pc-based-vr-appl ...
- 非意外的PDB错误 OK(0)
用ib编项目会出现这个error 用vs重新编译全部 就没有问题 ib的设置改下 Visual Studio Builds--Advanced --PDB File Allocation Force ...
- javaWeb中RSA的加密使用
加密算法在各个网站运用很平常,今天整理代码的时候看到了我们项目中运用了RSA加密,就了解了一下. 先简单说一下RSA加密算法原理,RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想 ...
- axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器
1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...
- [译]ES读写文档时shard-replication模型
官网页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html 本文是对官网页面的 ...
- 2017.12.27 sqlSessionFactory和sqlSession(to be continued)
参考来自:<深入浅出MyBatis技术原理与实践-第6章 > 1.SqlSessionFactory SqlSessionFactory是一个接口,最重要的功能是提供SqlSession. ...
- elasticsearch java客户端api使用(一)
1.客户端client构建 package com.pz998.app.service.utils; import static org.elasticsearch.common.settings ...
- 解决Android NDK 报jxxx编译找不到
如题 解决: 引入NDK对应的arm或者x86库 如果你用的是GinyMotion模拟器,那就引入x86库 不多说了,见截图 1.选择Propertities->C/C++ General-&g ...
- win 2003 / IIS6 部署网站的时候,文件IO操作、删除项目文件, 会导致IIS重启,Session丢失问题
项目中经常需要打些日志(文件IO读写操作),已记录调试.错误等信息.比较方便的有log4net等开源项目. 问题描述: 最近用win 2003 / IIS6,部署了一个2.0 的网站,在操作文件的时候 ...
- java中Queue接口
Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类 ...