位置: 编程技术 - 正文

浅析AngularJS中的生命周期和延迟处理(angular.js)

编辑:rootadmin

推荐整理分享浅析AngularJS中的生命周期和延迟处理(angular.js),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:angularjs1.5,angularjs作用,angularjs作用,angularjs1.5,angularjs2,angularjs常用总结,angular jsx,angular.js,内容如对您有帮助,希望把文章链接给更多的朋友!

这里,我们再讨论一些常用的高级的控制反转容器(Inversion of Control containers):延迟加载(lazy-loading),生命周期管理(lifetime management),以及延迟的创建/处理(deferred creation/resolution)。 延迟加载(Lazy-Loading)

所谓延迟加载就是当你需要用到对象时候才对其进行实例化。许多依赖注入系统都会在一开始就创建组件,作为它的可依赖项目。不过有时候,直到在应用中用到它们之前,你都不会想去实例化这些组件。Angular 中,一个很好的例子就是,当你在配置的时候去设置一个行为,而该行为又会引用到一些还没创建的组件。

假设你想拦截系统内建的 $log 服务,因此你把它存在了 $rootScope 里面。当然我不建议这样做,不过这样举例比较简单有效。为了拦截,你在配置的时候用到了 $provide 然后调用修饰方法。如果这时你想直接引用 $rootScope 的话,由于循环引用你会拿到个异常。而解决案是通过 $injector 延迟加载 $rootScope 。

下面的代码只会在 $rootScope 第一次被使用的时候才去加载它。

之后的调用都会拿到一样的单例 $rootScope。 这里有个可用例子。我之前好像听过有个(不对的)说法(Angular 只支持单例) … 当然不是真的。$injector 中的方法就是用来给你管理你的组件的生命周期的。

生命周期管理

生命周期涉及到你如何管理组件的实例。默认情况,当你注入一个 Angular 的依赖,依赖注入就会帮你创建它的一个副本然后在你的应用里面重用它。大多数情况下这确实是我们所期待的。而有些情况下,会要求同一组件的多个实例。假设下面的计数服务:

你的应用要跟踪不同的计数器。而你注入该服务后,总会拿到一样的计数器。这难道是 Angular 的限制?

浅析AngularJS中的生命周期和延迟处理(angular.js)

当然不是。重复一次,通过 $injector 服务你可以在任何时候创建一个新副本。下面的代码用了两个独立的计数器:

你可以看到计数器都是被独立的实例跟踪的,这里是可用例子。如果你需要经常生成新实例,你可以像这样注册服务:

产生一个需要的实例就是那么简单,而且你可以用你的工厂组件来代替 $injector:

你可以看看这个完整版本的可用例子。如你所见,用 Angular 的内建依赖注入是完全有可能管理你组件的生命周期的。那延迟处理(deferred resolution)又怎样呢 ? 比如说,有些组件你需要在 Angular 已经配置好之后引入,而且需要用它们的依赖来包装起来。

延迟处理(Deferred Resolution)

我们已经介绍了在 Angular 中可以延迟处理依赖的一种方法。当你想包装某些东西的时候,你可以调用 $injector 服务的 instantiate ,然后它可以通过参数嗅探来解决依赖,看起来就像用 $inject 的静态属性一样,或者也可以通过检查你传给它的数组来实现的。也就是说,下面这个是完全有效写法:

你还可以调用带装饰数组的方法。假设你有一个方法依赖于 $log 服务,你可以运行时通过延迟处理来调用它,像下面这样:

你可以看看这个可用例子(打开你的控制台,看看你按下按钮之后发生了什么)。 总结

综上所述,Angular 的依赖注入提供了许多高级特性,你在商业应用生产线上会希望并且经常会用到它们。factories, services, 和 providers 的便捷让 Angular 开发者常常产生错觉,认为这里只有唯一选项可用。而神奇之处在于 $injector 服务,你可以用它生成所需的单例,创建新的组件或者动态引用带依赖的方法。

最后要注意的是,你客户端代码里面的注入即使在 Angular 之外也是可用的。我们来看一个在 Angular 之外包装的,通过注入调用 $log 服务的例子,点这里。为什么要把 ‘ng' 传入方法的数组?它是 Angular 的核心模块,当你包装你的模块的时候是会被隐式添加的,但是如果你的指令要生成自己的注入实例的时候,你就必须显式添加了。

详解AngularJS的通信机制 现在几乎满世界的人都在问!外面有人么这里是USSAngularJS,我们遇到麻烦了,我们的服务讲得是克灵贡语(Klingon)而我们的控制器不能同它们的Ferengi指令

在AngularJS应用中实现一些动画效果的代码 在Angular当中,CSS和JavaScript之间唯一的区别就是它们的定义。没有什么区别妨碍到被定义的动画被使用。首先,我们需要加载ngAnimate模块到我们应用的roo

3个可以改善用户体验的AngularJS指令介绍 1.头像图片为了在你的应用中展示头像图片,你需要使用用户的电子邮件地址,将地址转换为小写并使用md5加密该字符串。所以聪明的做法是使用指令来

标签: angular.js

本文链接地址:https://www.jiuchutong.com/biancheng/380429.html 转载请保留说明!

上一篇:javascript瀑布流式图片懒加载实例解析与优化(js瀑布流布局)

下一篇:详解AngularJS的通信机制(angularjs2)

  • 计提增值税会计科目是什么
  • 企业所得税税负率怎么算出来的
  • 医疗保险单位和个人交的区别
  • 个人独资企业生产经营所得汇算清缴时间
  • 建筑行业一般纳税人增值税税率是多少
  • 社保多交退款多久到账
  • 管理费用贷方余额借方是负数怎么结转
  • 1%是什么税
  • 个人出租不动产税率
  • 为职工提供免费午餐
  • 开发间接费什么时候计提
  • 融资租赁咨询服务合同需要交印花税吗
  • 两笔不同业务能做一个凭证吗
  • 内账会计成本是指什么
  • 会务费发票税率是
  • 增值税专用发票可以开电子发票吗
  • 投资收益所得税税前扣除
  • 土地增值税清算的条件
  • 易票365是哪家公司的
  • 住宿费增值税怎么算
  • 交防伪税控技术怎么交
  • 未休假报酬需要报个税吗
  • 小规模纳税人增值税税率
  • 收汇结汇的账务处理
  • 企业所得税视同销售的捐赠扣除
  • 委托收款有哪些
  • 贷款呆账处理了多长时间恢复征信
  • 1697508857
  • 装修工程需要预缴吗
  • 离退休员工再任职薪酬的财税处理?
  • 地下车库怎么缴费
  • 发票冲红后是否可以重开
  • 如何在vue项目中导入外部的包
  • 进项发票没认证可以开红字申请单吗
  • 记账凭证的摘要怎么填写
  • php面向对象优点,缺点
  • 房产税的会计科目怎么做
  • 产供销一体化什么意思
  • 金融机构与小微企业借款合同印花税
  • 养老院护工5.8k包吃住
  • sci期刊投稿步骤
  • 公司收加盟费合法吗?
  • ppp中启用chap命令
  • 基于python的论文项目有哪些
  • 2020年企业报税的详细流程
  • 应税工资和实发工资区别
  • 采购入库单怎么生成
  • 作价出资土地与出让区别
  • 其他应付款怎么做账
  • 生产车间劳务费会计分录
  • 预付卡发票如何开
  • 小规模企业免征增值税如何申报
  • 货款已退回货已收到怎么办
  • 建筑公司跨区域经营预缴
  • 暂估入账后续处理
  • 收到项目资本金怎么入账
  • 土地勘测费收费标准
  • 无形资产的相关税费
  • 设备投入安装会计分录怎么写
  • 借别人的承兑后期还现钱可以吗?
  • 一年不到
  • 房地产企业会计科目
  • windowsxp怎么隐藏桌面图标
  • 让你的时间更有价值
  • 远程桌面的文件怎么无法复制到本地桌面
  • qqlogin.exe是什么进程 qqlogin.exe应用程序错误解决办法
  • win7系统IE浏览器怎么去掉360导航
  • kail Linux系统
  • xtemplate node.js 的使用方法实例解析
  • 自动断开网络共享怎么办
  • jquery模拟表单提交
  • 非递归与递归
  • 通过短信发送费用可能会收取运营商费用
  • node.js 环境配置
  • android网络开发技术答案形考任务五
  • jq 使用
  • 噩梦 1-4
  • 如何用jquery
  • android中使用sharedprefence的步骤
  • 欠税务局税款的后果
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设