发表于: 2019-12-16 22:22:37

1 1124


今天完成的事情:


完成微信小程序前台签到日历功能


完成前台历史签到功能


明天计划的事情:


完善前台日历功能




今天的收获:

基于我们对HTML元素的理解,指令本质上就是AngularJS扩展具有自定义功能的HTML元素

的途径。例如,我们可以创建一个自定义元素,它实现了<video>标签的功能并且能在所有浏览

器中工作:

<my-better-video my-href="/goofy-video.mp4">

Caneventaketext</my-better-video>

注意,这个自定义元素使用了特殊的开始和闭合标签my-better-video,以及my-href这个

自定义属性。

为了让这个标签更有用,可以将浏览器默认的video标签重载,用下面这种写法代替它:

<video my-href="/goofy-video.mp">

Can still take children nodes

</video>

正如我们看到的那样,指令可以和其他指令或属性组合在一起使用,这种组合使用的方式叫做合成。


当浏览器加载一个包含AngularJS应用的HTML时,我们只需要一小段很简单的代码就能够启

动AngularJS应用(前面的章节介绍过相关内容)。

在HTML中要用内置指令ng-app标记出应用的根节点。这个指令需要以属性的形式来使用,

因此可以将它写到任何位置,但是写到<html>的开始标签上是最常规的做法:

内置指令是打包在AngularJS内部的指令。所有内置指令的命名空间都使用ng作

为前缀。为了防止命名空间冲突,不要在自定义指令前加ng前缀。

<html ng-app="myApp">

<!-- 应用的$rootScope -->

</html>

现在,在HTML元素中可以使用所有内置或自定义指令了。同时,基于JavaScript的原型继承

机制,任何在这个根元素内部的指令只要能够访问作用域,就可以访问$rootScope。这里的能

够访问作用域指的是同DOM进行了链接,这个操作会在指令稍后的生命周期中进行。

由于指令的生命周期非常复杂,会有专门的章节来介绍。在那部分内容中还会讨论指令中哪

些方法是可以访问作用域的,以及作用域是如何在指令间共享的。



使用$watchCollection还可以检测对象或数组何时发生了变化,以便确定对象或数组中的

条目是何时添加、移除或者移动的。 $watchConllection的行为与$digest循环中标准的$watch

的行为一样,我们甚至可以把它当作标准的$watch。

$watchCollectiion()函数接受2个参数。


q obj(字符串/函数)


这个对象就是一个要监控的对象。如果传入一个字符串,它将被当作Angular表达式求值。

如果传入的是一个函数,将在当前作用域中被调用,并且会返回要监控的值。

q listener(函数)

这个回调函数会在集合发生变化时触发。类似于$watch函数,这个函数会被来自$watch的

新集合触发调用,而原来的集合(先前集合的副本)以及所在的作用域也随之生效。

$watchConllection()函数也返回一个注销函数。调用这个注销函数时,也会取消集合上的

$watch

$evalAsync()方法是一种在当前作用域上调度表达式在未来某个时刻运行的方式。 $digest

循环运行的第二个操作是执行$$asyncQueue。可以使用$evalAsync()方法访问这个工作队列。

$digest循环期间,贯穿脏值检查生命周期的每个循环之间的队列都是空的,这意味着使用

$evalAsync来调用任何函数都会发生两件事情。

q 函数会在这个方法被调用的某个时刻之后执行。

q 表达式求值之后至少会执行一次$digest循环。

$evalAsync()方法接受一个唯一参数:

q expression(字符串/函数)

这个表达式便是我们想要在当前作用域上执行的东西。如果传入一个字符串, Angular将会

在当前作用域上使用$eval求值该表达式。

如果传入的是一个函数, Angular将会使用传递给这个函数的scope对象执行函数求值



返回列表 返回列表
评论

    分享到