数据绑定如何在AngularJS框架中工作?
我没有在他们的网站上找到技术细节.当数据从视图传播到模型时,它或多或少清楚它是如何工作的.但是AngularJS如何在没有setter和getter的情况下跟踪模型属性的变化?
我发现有一些JavaScript观察者可以做这项工作.但Internet Explorer 6和Internet Explorer 7不支持它们.那么AngularJS如何知道我改变了例如以下内容并在视图上反映了这一变化?
myobject.myproperty="new value";
Run Code Online (Sandbox Code Playgroud) 我仍然遇到同样的问题,ng-repeat中的过滤器和函数被称为所有该死的时间.
这里的示例,http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p = preview,无论何时在单行上更改内容,someFilter过滤器都会被调用1000次.
显然这是因为子范围的任何更改都会冒泡到其父级,导致$ digest运行,导致所有过滤器运行(/sf/answers/1115545371/).是对的吗?如何在我的特定情况下防止它发生?
如何才能使其仅在已更改的项目上运行?
在我的实际用例中,即使在ng-repeat的项目上没有更改,也会调用过滤器,它是如此毫无意义,实际上会导致性能问题.
//编辑清除了来自探测器的所有不必要的东西 http://plnkr.co/edit/G8INkfGZxMgTvPAftJ91?p=preview
我是新手,angularjs并试图学习angularjs过滤器的概念.但在我的情况下,调用过滤器两次.我希望过滤器只运行一次,但它运行两次.不明白为什么会发生这种情况..
这是我的傻瓜 ......
我正在编写一个模块,使用自定义过滤器,我发现了一些奇怪的东西.如果我console.log()在过滤器内部使用,它会将值记录两次,即使我只调用一次.有没有办法只记录一次?这是否意味着过滤器内的代码会被执行两次?
这是过滤器:
.filter('arrayToSentence', function($sce, $rootScope) {
return function(array, index) {
console.log(index);
var i, word, sentence = '<span style="color:red;">';
for (i = 0; i < array.length; i++) {
if (i < array.length - 1) {
sentence += array[i] + '&bnsp;';
} else {
sentence += array[i];
}
}
sentence = sentence += '</span>'
return $sce.sentence;
}
})
Run Code Online (Sandbox Code Playgroud)
将console.log(index)被记录两次.我需要确保我的滤波器逻辑不会在任何地方重复,因为我需要比较两个数组(一个被过滤,另一个用于对它们之间的差异进行着色,如缺少单词或单词不匹配).
[编辑]这是向我指出,我的问题是重复的,这 可是原来的问题没有回答如何避免这个问题,但我相信@defaultcheckbox提供充实的答案.