Javascript 将新对象传递给角度绑定时出现无限摘要错误
我试图通过单向绑定变量将一组计数作为对象传递,并得到一个无限摘要,因为我绑定到组件的方法每次都返回一个新对象。下面是一个例子: 在父组件模板中:Javascript 将新对象传递给角度绑定时出现无限摘要错误,javascript,angularjs,Javascript,Angularjs,我试图通过单向绑定变量将一组计数作为对象传递,并得到一个无限摘要,因为我绑定到组件的方法每次都返回一个新对象。下面是一个例子: 在父组件模板中: <some-component counts="$ctrl.selectedCounts()"></some-component> 如何绑定此计数绑定,使其不会在不改变父组件中的对象并将其传递给某个组件的情况下创建无限摘要?我曾尝试使用=*作为某些组件中的绑定,虽然它不会创建无限的摘要循环,但出于某种原因,它也不会将更改传播到
<some-component counts="$ctrl.selectedCounts()"></some-component>
如何绑定此计数
绑定,使其不会在不改变父组件中的对象并将其传递给某个组件的情况下创建无限摘要?我曾尝试使用=*
作为某些组件中的绑定,虽然它不会创建无限的摘要循环,但出于某种原因,它也不会将更改传播到子组件
这里有一把小提琴,它有同样的无限摘要:
与对象内容一起使用$doCheck
生命周期挂钩
绑定对象或数组引用时,$onChanges
钩子仅在引用的值更改时执行。要检查对象或数组的内容的更改,请使用$doCheck
生命周期挂钩:
app.component('nvPersonalTodo', {
bindings: {
todos: "<"
},
controller: function(){
var vm = this;
this.$doCheck = function () {
var oldTodos;
if (!angular.equals(oldTodos, vm.todos)) {
oldTodos = angular.copy(vm.todos);
console.log("new content");
//more code here
};
}
})
app.component('nvPersonalTodo'{
绑定:{
todos:“您在这里没有将对象传递给您的组件,而是将函数本身传递给组件。糟糕,我在重写示例,但错过了()
使用对AngularJS的更改检测器无法检测到的更改执行深度相等检查,因此不会触发$onChanges
。如果检测到更改,必须存储以前的值用于与当前值进行比较。我不清楚这是如何解决无限摘要循环的,每当我使用单向绑定时,我仍然会收到INFDIG。$doCheck
如何帮助这一点?我认为这更像是“在检查是否需要更新时执行此操作,"不过,我可能完全错了。谢谢!我真的很想得到一个干净的解决方案,我以前肯定遇到过这个问题,并绕过了这个问题。在这种情况下,我应该使用=*而不是<的浅绑定吗?只是大声想一想,但这可能会解决问题,因为当您的组件不使用doCheck时,doCheck最有用“无法正确接收更改,这就是=*。使用单向Hm,我明白了。很抱歉现在在飞机上没有最好的wifi哈哈。着陆后我会用更完整的示例更新此q!我在问题中添加了一个JSFIDLE,希望这会有所帮助!”!
app.component('nvPersonalTodo', {
bindings: {
todos: "<"
},
controller: function(){
var vm = this;
this.$doCheck = function () {
var oldTodos;
if (!angular.equals(oldTodos, vm.todos)) {
oldTodos = angular.copy(vm.todos);
console.log("new content");
//more code here
};
}
})