angularJS常见问题汇总

问题描述
解决方案
当你简单的动态给页面插入html时,
此时html带有angular的语法不会执行的。
var uploadInfo = '上传成功!<a ng-click="quitTo('customer')">点击</a>跳转到客户列表界面';
angular.element('.modal-body').append(uploadInfo);
此时ng-click不会执行
将uploadInfo通过$compile进行处理,
var ele = $compile(uploadInfo)($scope);
angular.element('.modal-body').append(ele);
任何指令的生效都需要compile,这一步在app启动的时候angular先帮你做了,
但你插入的html是没有经过compile这个步骤的,所以你手动compile下即可。
使用ng-repeat出错:Error: [ngRepeat:dupes]
Error: [ngRepeat:dupes]这个出错提示具体意思是指数组中有2个以上的相同数字。
ngRepeat不允许collection中存在两个相同Id的对象

对于数字对象来说,它的id就是它自身的值,因此,数组中是不允许存在两个相同的数字的。为了规避这个错误,需要定义自己的track by表达式。

例如:item in items track by item.id 或者 item in items track by fnCustomId(item)。嫌麻烦的话,直接拿循环的索引变量$index来用item in items track by $index

使用第三方插件或者原生的js修改angular中的model或者view的值时,相应的model或者view的值不会变化,也就是angular的双向数据绑定失效
angular有自己的一个上下文,所有与angular有关的代码执行(如双向数据绑定)都在这个上下文中进行,因此如果你用第三方插件或者原生的js进行操作时,此时代码是在javascript的上下文中执行,angular无法知道你是否修改model或者view的值,自然也就无法进行双向数据绑定。解决方案时在操作之后执行$scope.$apply()或者将操作的代码放在$scope.$apply(function(){//操作的代码...})
 angular中注入方式有推断式注入、$inject注入、内联式注入,当然这三种方式在angular中是等效的,但推断式注入对于压缩的 JavaScript 代码来说是不起作用的,因为压缩过后的 JavaScript 代码重命名了函数的参数名。  尽量不要用推断式注入,最佳是用内联式注入的方式。

持续更新中...

posted @ 2015-11-05 10:51  laixiangran  阅读(2319)  评论(0编辑  收藏  举报