AngularJs学习笔记

  1. 使用config对服务进行配置时,需要用provider来定义服务
  2. config需要再provider函数之后执行,否则报错
  3. 调试阶段尽量使用非压缩的,错误信息会比较详细
  4. Select可以使用ng-option来代替ng-repeat的操作,格式是o.key for o in array,当数据源是对象不是数组时,那就是 key for (key,value) in object
  5. ng-repeat尽量不要写在单选框的input里面,可以写到外面的div标签中
  6. 需要给单选框或者复选框设置默认值时,只需要给ng-model的值加上默认值
  7. $watch尽量只用一个,当有多个需要监控时,将多个放到同一个对象里,然后使用$scope.$watch(object,callback,true);$watch最后一个参数表示是否是严格相等
  8. $watch尽量放在服务中,而不是在控制器中
  9. constant()设置的常量可以注入到config参数里面去,但是value()不行
  10. angularJs的内置服务:$http,$log, $routeProvider,$q,$httpProvider,$resource,$location,$cookieStore,$cacheFactory,$animate,$compile,$document,$controller,$filter,$interval,$locale,$parse,$rootScope,$window,$timeout
  11. $injector(注入器服务)管理依赖关系的查询和实例化
  12. 建议依赖注入使用行内注入声明,这样即使代码进行了压缩,也可以正常运行。如果用推断式注入声明就需要使用ngMin
  13. Angular-route的下载地址?github里的原路径说明了不能用。使用第三方的angular-ui-router
  14. 为了兼容ie8,style都需要写成ng-style。ng-style 属性值必须是对象,表达式返回的也是对象。
  15. ng-cloak可以避免闪烁,但是实际上ng-cloak是加上一段样式,可自行添加上:@charset “UTF-8”;[ng:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}
    完整应该是:
    @charset “UTF-8”;[ng:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng:form{display:block;}.ng-animate-start{clip:rect(0,auto,auto,0);-ms-zoom:1.0001;}.ng-animate-active{clip:rect(-1px,auto,auto,0);-ms-zoom:1;}
  16. ng-include应该包含单引号,如ng-include=”’a.html’”
  17. 自定义指令时内部属性建议都是用小写
  18. $scope里面尽量都用对象来存储数据,即始终用“.”,这样继承的作用域里可以直接访问,可以参考t18.html
  19. ng-model只用于表单元素,加上ng-model之后,会将ng-model绑定变量或者对象放入到$$watchers列表中,用于$digest循环。记住必须把scope的变量或对象放到$$watchers列表中才可以进行自动脏值检查。
  20. 进行表单验证时input必须加上ng-model。参见t19.html
  21. 自定义指令的controller和link函数可以进行互换。但是controller可以配合controllerAs来提供可在指令间复用的行为,但是link只能在当前内部指令中定义行为,且无法在指令间复用。
  22. ng-include是$http异步请求
  23. $compile用于动态显示HTML内容
  24. Scope.$eval和$parse都是用来解析表达式。$parse是一个独立服务,返回一个函数。$eval是scope的api。
  25. 路由去除#号需要后台的合作
  26. 官方推荐避免闪烁的办法,将angular脚本放在header中,或者在head中额外引入angular.css样式文件。这样才能更早因此ngCloak节点
  27. angular-ui-grid 2.x版本module名称是ngGrid,3.x版本是ui.grid。两个版本区别比较大,3.x不支持IE8,2.x支持IE8
  28. $apply很少会主动调用,因为在各种angular事件指令以及$timeout等服务中,都会自动调用一次它来确保界面刷新。如果你要自己挂接第三方组件的事件,那么就要记得调用一次$apply了,否则在这个事件处理函数中对scope变量的更新就不会更新到界面上。
  29. 指令中scope设为true,则继承作用域,设为false或默认,则使用所在的作用域,设为{},则隔离作用域
  30. 指令中controller主要是逻辑处理,用于指令间的使用,而link则是对dom的操作
  31. $$phase是angular内部使用的状态标志位,用于标识当前是否处于digest状态

    1. 使用ng-options和ng-checked都需要加上ng-model
  32. 自定义指令中compile是用于改变原始DOM(template element),然后就会创建instance element,并且创建出scope。pre-link方法会在所有子元素post-link方法调用前执行。post-link执行时,所有子元素的pre-link和post-link都已经执行。所以post-link被认为是代码最安全的位置。http://www.jvandemo.com/the-nitty-gritty-of-compile-and-link-functions-inside-angularjs-directives/
  33. ng-bind-html可以绑定html表达式,不过需要先加载ng-sanitize,不支持input不安全的字符,可以考虑使用$sce服务。
  34. 因为js赋值都是引用赋值,所以把$scope的变量直接赋值给某个局部变量时,需要考虑局部变量变化时,$scope变量是否需要同时改变。如果不是,就克隆赋值
  35. angular的DOM事件取消冒泡等使用$event,在ng-click等指令的作用域中,可以使用$event。Angular在执行事件函数时候传入了一个名叫$event的常量,该常量即代表当前event对象,如果你在Angular之前引入了jQuery那么这就是jQuery的event
  36. ng-if会使当前作用域继承父作用域,所以如果在当前ng-if元素中自定义了一个指令,且scope:false,这样作用域仍然是继承父作用域的。所以有些地方用ng-if,有些用ng-show,ng-hide
  37. 开发angular一定要注意引用传递和值传递,对象赋值是引用传递,普通类型变量赋值是值传递
  38. ng-mouseleave在IE8中离开子元素也会触发,其他浏览器不会。
  39. The “Error: [$sce:itype] Attempted to trust a non-string value in a content requiring a string: Context: html” error was occured when i by mistake try to call trustAsHtml twice on the same “label”.
  40. 脏检查只针对$scope中绑定到UI元素上的变量,如果想要非UI上$scope变量改变其他变量,可通过引用赋值
  41. ngBindHtml并不会和$scope关联双向绑定,如果html中存在ngClick、ngHref、ngShow等angular指令,并不会被conpile
  42. angular-file-upload不支持ie8
  43. 有的时候我们需要为非input类型的元素添加ng-model来实现双向的数据绑定,从而减少冗余代码,那么可以尝试一下的方式:使用自定义指令的require属性
  44. 关于directive里的link和controller区别?1、执行顺序:先controller后link2、何时使用controller:一般场景下都不想要使用controller,只需要把逻辑写在link中就可以了;用controller的场景就是该指令(假设为a)会被其他指令(假设为b)require的时候,这样就会在b指令的link函数中传入这个controller(如果require多个的话,传入的是一个数组,数组中存放的是每一个require的指令对应的controller),目的很显然是为了指令间进行交流的
  45. 指令销毁时会自动清除当前作用上通过$on绑定的事件
  46. angular指令嵌套如果是继承作用域,那么执行过程就是 父指令-> 子指令。如果是隔离作用域,那么执行过程是子指令 -> 父指令
  47. 有一点是在作Directive的时候,一定不要用Element去扩展, 否则会出错, 另外$http的cache功能也会失效,需要在URL加上随机数防止数据被浏览器缓存。
  48. angular启动执行顺序:
    app.config()
    app.run()
    directive’s compile functions (if they are found in the dom)
    app.controller()
    directive’s link functions (again, if found)

  49. angular-file-upload在一个文件上传成功或失败之后,该文件无法重复上传,已修改,见物理视图

  50. 指令执行时,link方法执行顺序默认是从子指令到父指令,除非父指令的属性控制了子指令的显示。

  51. angular-ui-router中配置resolve的时候需要的是key,value。value可以是字符串或者对象,function,如果是字符串,需要是服务

  52. view上的绑定可以不用控制器中的$scope,也可以使用控制器中的this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值