发表于: 2019-12-16 22:22:37
1 1125
今天完成的事情:
完成微信小程序前台签到日历功能
完成前台历史签到功能
明天计划的事情:
完善前台日历功能
今天的收获:
基于我们对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对象执行函数求值
评论