Skip to content

Latest commit

 

History

History
23 lines (18 loc) · 1.95 KB

Angular.md

File metadata and controls

23 lines (18 loc) · 1.95 KB

AngularJS

1.依赖注入的原理,如何实现一个简单的依赖注入

依赖注入原理通俗的说就是当一个函数需要某些对象的时候,这个函数只需要指明自己需要的对象,就会有一个容器 将这些对象自动传递给这个函数,在angularjs中的具体表现比如说我们定义了一个service,就可以在控制器中将这个 service作为参数使用。实现一个简答的依赖注入需要一个注册函数来作为依赖的注册,可以利用一个对象来实现注册依赖 的保存。一个注入函数来实现注入,注册函数很好处理,只需要将依赖的名字和对应的函数保存在依赖对象即可,而注入函数显然 需要的参数是一个声明依赖的数组,一个逻辑函数,对这个依赖数组遍历查看是否注册,使用hasOwnProperty是比较好的方法, 如果没有注册则放弃,注册了就将他push到一个数组中,最后返回一个function,这个function只需要使用apply方法将数组 作为参数传递给注入函数中的函数参数即可实现。

如何实现注入函数忽略参数传递的顺序?

可以利用正则去解析注册函数的参数,将注入函数中函数参数的参数解析出来,然后逐个去依赖中查询即可,这会带来的问题就是如果 压缩的话,这些参数会被一些简单的字母代替,也就意味着失效,angularjs的解决方式使用数组作为参数,数组最后一个就是依赖注入的函数 ,当然这得保持依赖的顺序。

参考:

AngularJs依赖注入的研究

2.什么是脏检查?

脏检查是Angularjs的视图更新机制,Angularjs就是通过脏检查来检测数据是否变动,在angular中,只有一些特定的事件才能触发脏值检查 比如:DOM事件(比如:用户输入点击按钮)、XHR响应事件、Location变更事件、定时器事件等。