本帖最后由 hydee 于 2018-8-16 16:22 编辑
1、angularJS的运行机制
当你用浏览器去访问anjularJS开发的页面的时候,浏览器依次做了如下一些事情: - 加载html,然后解析成DOM;
- 加载angular.js脚本;
- AngularJS等待DOMContentLoaded事件的触发;
- AngularJS寻找ng-app指令,根据这个指令确定应用程序的边界;
- 使用ng-app中指定的模块配置$injector;
- 使用$injector创建$compile服务和$rootScope;
- 使用$compile服务编译DOM并把它链接到$rootScope上;
- ng-init指令对scope里面的变量name进行赋值;
- 对表达式进行替换,执行相应指令!
整个过程可以用这张图来表示:
2、anjularJS的作用域$scope
$scope的生命周期分为以下几步:
1. 创建 - 作用域会在应用启动时通过注入器创建并注入。在模板连接阶段,一些指令会创建自己的作用域。 2. 注册观察者 - 在模板连接阶段,将会注册作用域的监听器。这也监听器被用来识别模型状态改变并更新视图。 3. 模型状态改变 - 更新模型状态必须发生在scope.$apply方法中才会被观察到。Angular框架封装了$apply过程,无需我们操心。 4. 观察模型状态 - 在$apply结束阶段,angular会从根作用域执行$digest过程并扩散到子作用域。在这个过程中被观察的表达式或方法会检查模型状态是否变更及执行更新。 5. 销毁作用域 - 当不再需要子作用域时,通过scope.$destroy()销毁作用域,回收资源。
3、anjularJS的模块和依赖注入 在angular中,module和$provide相当于是服务的注册;injector用来获取对象(angular会自动完成依赖的注入);依赖关系的声明在angular中有3种方式。下面从这3个方面,介绍下angular的DI。 1. angular.module()创建、获取、注册angular中的模块。 2. module和provide是用来注册服务到injector中的。查看官方的API,可以看到$provide提供了provide()、constant()、value()、factory()、service()来创建各种不同性质的服务;angular.Module中也提供了这5个服务注册方法。其实2者功能是完全一样的,就是用来向DI容器注册服务到injector中。 3. 使用angular.injector();也能获取到注入器,但是没有和模块绑定。
4、anjularJS的服务service
|