我正在使用angularjs-google-maps,并且在尝试将我的客户作为地图上的标记循环时收到错误。
<map>
<custom-marker ng-repeat="cust in customers" position="[ {{ cust.lat }}, {{ cust.lon }} ]">
<div class="{{ cust.category }}">{{ cust.name }}</div>
</custom-marker>
</map>
该错误似乎与cust.category
和cust.name
有关,因为当我删除它们时,它们可以正常工作。
这是我收到的错误消息的前几行:
Watchers fired in the last 5 iterations: [["[ cust.category , cust.name ]; newVal:
[\"pro\",\"Fred\"]; oldVal: [\"pro\",\"Fred\"]","fn: function (context) {\n
try {\n for(var i = 0, ii = length, part; i<ii; i++) {\n
完整的错误消息here。
对此有任何帮助表示赞赏。提前谢谢!
更新
自定义标记指令的代码是angular-google-maps的一部分here。
答案 0 :(得分:1)
似乎摘要周期陷入了循环。 Angular有一个摘要周期,他们可以观察模型(无论是在$ scope上),并在模型发生变化时对视图应用更改。如果在摘要周期中你执行了一些再次改变一个值的函数,你就会触发另一个摘要周期,再次触发同一个函数,改变模型上的一个值并触发一个无限循环的摘要周期。
也就是说,您可能希望为customMarker指令添加代码,以便更准确地回答答案。
答案 1 :(得分:0)
为什么你绑定class =“{{cust.category}}”,尝试使用ng-class.Also你可以在ng-repeat中使用跟踪$ index.I在ios9上运行我的离子应用程序时出现此错误他们发布了补丁来解决这个问题。
答案 2 :(得分:0)
这样的代码:
scope.$watch('[' + varsToWatch.join(',') + ']'...
连接后看起来像"[obj1.prop, obj2.prop]"
表达式,像$parse
一样解析,并导致每次迭代时自我评估数组的新实例,即使内部没有任何变化。
您应该在调用$watch
之前对其进行插值/解析,并编写一个条件,该条件仅比实际更改的相关数据更改。
$watch
是function(watchExp, listener, objectEquality, prettyPrintExpression)
您可以尝试使用第三个参数(objectEquality
)按值比较数组,但不能通过引用相等性来比较。
@param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of comparing for reference equality.