Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

闲聊 #1

Open
jetzhong0808 opened this issue Dec 5, 2015 · 0 comments
Open

闲聊 #1

jetzhong0808 opened this issue Dec 5, 2015 · 0 comments

Comments

@jetzhong0808
Copy link
Owner

最近使用ng开发时得到的体会,可以用来回答一下几个问题:

1. angular的数据绑定采用什么机制?详述原理

脏数据检查 != 轮询检查更新,不要以讹传讹了!!!
谈起angular的dirty-checking, 常见的误解就是认为:ng是定时轮询去检查model是否变更。
其实,ng只有在指定事件触发后,才进入$digest cycle:

这个问题往往制约着项目架构的选型倾向,如果注重于双向绑定的性能可以考虑使用vue.js
目前正在进行的项目中,当数据条目达到2K时,会出现前端性能的瓶颈

2. 两个同级组件a和b,如果a中触发一个事件,有哪些方式能让b知道,详述原理

两个controller之间进行交互可以通过父作用域数据共享。在directive使用scope:{=}即可对父元素作用域元素进行双向绑定了(注意处理冲突)

3. 一个angular应用应当如何良好地分层?

私以为controller应该尽可能的瘦,相关的业务逻辑和数据处理放在service层中,然后可重用封装后的组件使用directive

4. angular应用常用哪些路由库,各自的区别是什么?

ngRouter和ui.router,后者支持<ui-view>嵌套路由

5. ng-if跟ng-show/hide的区别有哪些?

前者决定否会生成DOM元素,后者决定是否隐藏DOM元素。区别就在于DOM元素是否会被生成

6. ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?

理论上来说ng-repeat是不允许有重复值的,如有必要可使用track by来区别

7. ng-click中写的表达式,能使用JS原生对象上的方法,比如Math.max之类的吗?为什么?

会默认调用$scope.Math.max

8. {now | "yyyy-MM-dd"}这种表达式里面,竖线和后面的参数通过什么方式可以自定义?

filter

9. factory和service,provider是什么关系?

这个问题比较大,也是很经典的问题,至今没有看到非常详尽的解释
部分信息可参考AngularJS 之 Factory vs Service vs Provider
factoryserviceprovider是层级封装的关系,它们都是单例模式
最底层的provider一般作为.config()函数的专属依赖服务
中间的service通过构造函数创建对象
顶层的factory通过工厂函数创建对象

Next:Angular dirty check原理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant