在AngularJS应用中,通常我们使用`ng-app`指令自动启动应用,并通过`angular.module`定义和注册模块。然而,在某些特殊情况下,我们可能需要手动初始化Angular模块与控制器,这通常发生在我们不希望或者不能使用`ng-app`指令时。本文将详细探讨如何实现这一过程。 手动初始化模块的方法是使用`angular.bootstrap`函数。这个函数接受两个参数:一个是你要初始化的DOM元素,另一个是你应用的模块名。例如,在给定的代码中: ```javascript document.onclick = function() { var aDiv = document.getElementsByTagName('div'); angular.bootstrap(aDiv[0], ['myApp1']); angular.bootstrap(aDiv[1], ['myApp2']); }; ``` 这里,当用户点击文档时,两个不同的模块`myApp1`和`myApp2`分别被初始化在两个`div`元素上,每个模块都有对应的控制器`Aaa`和`Bbb`。 手动初始化控制器可以在模块的`.controller`方法中定义,就像这样: ```javascript var m1 = angular.module('myApp1', []); m1.controller('Aaa', function($scope) { $scope.name = 'hello AngularJs'; }); var m2 = angular.module('myApp2', []); m2.controller('Bbb', function($scope) { $scope.name = 'Hi'; }); ``` 此外,我们还可以使用`.run`方法来初始化控制器,但这种方法的一个限制是它只能操作全局变量,因为`.run`中的依赖注入只能访问到根作用域($rootScope)。以下是如何使用`.run`初始化数据的例子: ```javascript var m1 = angular.module('myApp', []); m1.run(['$rootScope', function($rootScope) { $rootScope.name = 'hello'; }]); ``` 在这个例子中,`$rootScope`是所有控制器共享的全局作用域,因此我们在`.run`中设置的`name`属性可以被应用中的任何控制器访问。但是,需要注意的是,由于`.run`方法不支持局部作用域(`$scope`),所以在其中直接使用`$scope`会导致错误。 总结来说,手动初始化Angular模块和控制器是一种更加灵活的开发方式,它可以让你在没有`ng-app`的情况下启动应用,或者在特定事件触发时才进行初始化。这通常用于复杂的场景,如单页应用(SPA)的动态加载或异步初始化。同时,`.run`方法则提供了一种在应用启动时执行初始化逻辑的方式,但其对全局状态的依赖可能会增加代码的耦合性,因此应谨慎使用。了解和掌握这些技巧对于深入理解AngularJS的工作原理以及提高应用的灵活性至关重要。
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 4
- 资源: 919
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- zbar libiconv.so libzbarjni.so 32 64位的配置包
- 基于stm32的家庭湿度控制系统的设计与实现源码+文档说明(高分项目)
- 一个简单的Python程序,它使用socket库来实现一个UDP服务器,该服务器接收UDP消息,然后通过TCP连接将消息转发给T
- OpenVINO CSharp 异步推理接口部署YOLOv8 代码
- 问题解决教程.docx
- Matlab箱线图教程.txt
- 基于树莓派的智能小车:自动避障,实时图像传输,目标检测,网球追踪
- 百度AI-语音合成练习
- 操作系统复习(极速版)
- 一个数字信号处理的例子,包括信号的采样、带噪信号的生成、使用低通滤波器滤波,并绘制结果
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)