一、指令
- scope.template中的dom属性值可以直接用{{attr}}表达式取到scope中的属性attr
- link中attr.$observe可以监听scope属性attr的动态变化
- 需要改变$scope上的属性值时:
$scope.$apply(function(){$scope.attr = newValue
})
复制代码
二、服务
- 循环依赖(a->b->a)如何处理
循环依赖简单的说就是a服务引用了b服务,b服务又引入a服务,从而造成依赖死循环。解决对策就是分析a和b的依赖关系和依赖强弱关系,如果a中引入了大量服务,自身依赖关系很多(通常是公共服务),而b中依赖关系很少(通常是业务服务),但是b中需要用到a服务的方法,那么只需要在b中调用a服务的地方引入a服务即可,比如:
小技巧:在调试器中可以通过angular.element(document).injector().get("GLOBAL")拿到服务对象进行调试function getOsInfo(){var GLOBAL = angular.element(document).injector().get("GLOBAL");return GLOBAL.getOsInfo(); } 复制代码
- 插值服务$interpolate
$interpolate服务用于解析插值字符串,例如:var interpolatedFunc = $interpolate(newVal); //newVal=“{{myName}} is good”interpolatedValue = interpolatedFunc({myName: "梁非凡"}); // interpolatedValue = "梁非凡 is good" 复制代码
三、路由
- $routeChangeStart和$locationChangeStart的区别和用处
前者可以得到即将跳转的路由对象信息,后者则是得到跳转后的路由路径信息 - $routeUpdate 获得当前路由刚刷新时的状态