文档章节

Angularjs的那些事 – 视图的生命周期

huangjacky
 huangjacky
发布于 2014/10/12 12:21
字数 779
阅读 68
收藏 0

Angularjs的最主要的一个应用场景就是单页面应用(SinglePageApplication),但是SPA中会有一个明显的问题,在视图切换的时候,它只会用新视图去替换视图容器内的HTML,但如果旧视图在加载之后动态生成一些DOM元素,而这些新生成的DOM元素并没有在容器内的话,那么视图切换后,这些DOM元素还会存在。因为angular的视图切换是由js来动态完成的,并没有让浏览器去重新加载整个页面。

下面就是一个例子:

总共有两个页面,使用ngRoute来路由。视图容器如下:

其中一个页面是使用xheditor来创建的编辑器,它的工具栏能浮动出一些小框,其实就是动态在body末尾生成一些DOM元素,如下图:

最下面红色框就是新生成的元素,如果我们现在切换回首页视图会怎么样?

这些元素还在的,因此我们需要在离开这个视图的时候清除掉这些DOM元素,那么视图加载到离开都有些什么事件呢?

从官方文档看,ngView只有一个事件$viewContentLoaded,名字是在视图加载完后执行的内容。因此我们来测试如下的代码:

在视图层添加如下代码:

在控制器中添加如下的代码:

 

看下运行的效果:

视图层中的代码率先被执行,然后进入到控制器的逻辑,最后触发$viewContentLoaded。

从上面的代码看,如果我们加载后的事件只需要对DOM进行操作,那么在视图层的script中即可,但是如果需要使用到控制器中的数据的话,就必须在控制器中完成。

进入视图的事件搞定了,那么离开的事件呢?官方文档没有介绍,但是其他文档中我们发现$location和$route有change相关的事件。

代码如下,为了更早的生效,这段代码可以写入到app.js中:

运行结果如下:

我们完全可以在$locationChangeSuccess中判断fromUrl是不是当前视图的hash,如果是然后执行离开视图的操作即可。

同理的事件还有$routeChangeStart和$routeChangeSuccess,其实官方文档中可以看到$route是依赖于$location的,因此我们可以猜测其实他们应该是同一个东西,不同的封装而已罢了。

看如下的代码:

运行结果:

运行结果中需要注意:$routeChangeSuccess事件是在整个新的视图加载完成之后才会执行的。

因此要选择当前视图离开事件的时候,请考虑$locationChangeStart,$locationChangeSuccess,$routeChangeStart

TIPS:这样的离开事件可以在进入视图的时候增加监听,在离开时执行完相应的操作后,取消监听,如下:

搞定了,哈哈。学习交流为主。

最后是本文中使用到的代码:点击下载 angular1.rar

 

本文转载自:http://www.cnblogs.com/huangjacky/p/3693180.html

共有 人打赏支持
huangjacky
粉丝 5
博文 19
码字总数 0
作品 0
深圳
高级程序员
【前端】Angular组件钩子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m18633778874/article/details/82259409 Angular中的钩子方法,是非常常用的知识点,也在项目代码运用中有所体...

冯浩月
08/31
0
0
Angular 中得 scope 作用域梳理

$scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 $scope,同...

顽Shi
2014/09/21
0
2
5个示例带你学习AngularJS

本文由 伯乐在线 - 蝈蝈 翻译自 tutorialzine。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。 直到现在,你或许已经听说过AngularJS了,一个改变你对web应用思考方式,由谷歌开发的令...

冬瓜1
2013/12/30
0
0
ngular2 VS Angular4 深度对比:特性、性能

在Web应用开发领域,Angular被认为是最好的开源JavaScript框架之一。 Google的Angular团队已于3月23日发布了Angular4,而期待已久的Angular2版本则是之前版本的完全重构。 对于成熟的开发人员...

机器的心脏
06/02
0
0
Angular 应用的“外壳”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxb141001yxx/article/details/81987588 安装 Angular CLI命令行工具 如果没有安装Angular CLI,那么先执行:...

13期王小波
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
今天
1
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
今天
2
0
TiDB 在爱奇艺的应用及实践

爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...

TiDB
今天
1
0
Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
3
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部