美文网首页技术干货程序员
深入AngularJS源码,写自己的 JngularJS(3)

深入AngularJS源码,写自己的 JngularJS(3)

作者: zidea | 来源:发表于2018-12-20 07:11 被阅读51次

    有时候想把一件事情用语言表达清楚的确要花一些心思和下一些功夫。说话沟通看是简单,其实要表达清楚明了确实不是容易的事。需要不断推敲,调整。如果表达不清楚,多半可能是作者本身没有很好理解和吃透他要讲述的内容。

    8.当值为 Nan 应该如何判断相等 

    继续,我们都知道在 javascript 中有 NaN(Not-a-Number),代表非数字值的特殊值。这个值有一个特点,就是他无法和自身相等。想起来的确有些难于理解,但是事实就是这样。既然他有这样的特性我们在比较是否相当的方法中就需要对他有一些特殊关照。

    测试代码段

    9.$eval 

    Angularjs 提供许多以 scope (对象为上下文来)参数来执行代码的方式。最简单当属 $eval ,这个方法接受一个函数做为参数。然后在返回该函数时将 scope 做该返回函数的参数传入。

    到这里大家可能会想为什么我们要这样调用一个函数,他的好处就是可以将 scope 作为参数传入,以便函数可以对 scope 进行一些操作。我们也希望传入一个字符串表达式,将表达式与 scope 关联来执行。这在随后给大家演示。    

    10.$apply 

    $apply()会触发整个应用中的所有scope上的$digset循环。意思就是,每次我们调用$apply()都会在整个应用的生命周期中开启一个新的$digset循环。

    我们在不使用 angularjs 内置方法或第三方库的方法时,如果需要触发 $digest 我们都会使用 $apply 这个方法。我这里来简单地实现一下这个方法。

    在 finally 我们调用 $digest 方法来确保 $digest 会被执行,即使报错。$apply 作用所在是在执行一些 Angularjs 不熟悉的代码时,如果这些代码改变了 scope,确保 watch 可以监视到 scope 的变化。

    11. $evalAsync

    异步贯穿于整个 javascript 语言,随处可见。也就是一些代码可能在将来某个不确定的点执行。我们会用到 setTimeout 来将代码在随后的某个时间执行。Angularjs 中也提供了类似的 $setTimeout 服务。在 scope 中也类似方法如用于如 scope 的 $evalAsync 这个方法,$evalAsync()的表达式会在当前$digset循环中执行而不是下一个循环中。

    相关文章

      网友评论

        本文标题:深入AngularJS源码,写自己的 JngularJS(3)

        本文链接:https://www.haomeiwen.com/subject/smchkqtx.html