使用getterSetter从ng-model中获取无限摘要循环
angular infinite digest loop from ng-model using getterSetter
html:
<select style="width: 100%;" ng-model="vm.orgType" ng-model-options="{getterSetter: true}" ng-options="orgType as orgType.ORGANIZATION_TYPE for orgType in vm.orgTypes">
</select>
这里是getter/setter函数:
function orgType(selectedType) {
if (arguments.length == 0)
return orgType.selectedOrgType || { ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null };
orgType.selectedOrgType = selectedType;
if (selectedType.ORGANIZATION_TYPE_ID) {
if (vm.registrant.StakeholderOrgs[0])
vm.registrant.StakeholderOrgs[0] = selectedType.ORGANIZATION_TYPE_ID;
else
vm.registrant.StakeholderOrgs.push(selectedType.ORGANIZATION_TYPE_ID);
}
else
vm.registrant.StakeholderOrgs.splice(0);
}
下一行:
return orgType.selectedOrgType || { ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null };
抛出无限摘要循环错误。
让我解释一下我在这里要做什么。如果有选择,我需要将id推到列表上。我意识到我可以对某个变量selectedOrgType
做一个ng模型然后把我的逻辑放到一个ng变化中。然而,我试图使下拉,不创建任何不必要的模型变量。相反,我希望把逻辑放在getter/setter中,这对我来说更合适。其中一个vm.orgTypes
是{ ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null }
,我希望这将是我的默认值,而不是我得到这个摘要错误,不明白它是从哪里来的
当您添加ng-model
属性时,angular添加内部监视,检查每个digest循环的值,如果值更改-再次运行digest
在这种情况下,返回对象字面量。在javascript中,当你比较两个字面值时,即使是相同的结构,也会得到false
({a:1} == {a:1}) // false
因为这确实是两个不同的对象。
所以,当你在getter中返回object literal时,watch
用前一个值检查它,并且,正如我上面所说,如果你返回literal - get false
所以你得到了无限摘要的错误。
你只需要返回相同的对象。
如果数组中有这个对象,比如
vm.orgTypes=[
{ ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null }
];
所以你只需要直接使用它:
return orgType.selectedOrgType || orgTypes[0];
还有另一种方法:只需保存默认值到变量并使用它
var defaultSelect = { ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null };
....
function orgType(selectedType) {
if (arguments.length == 0)
return orgType.selectedOrgType || defaultSelect;
在这种情况下,您将返回默认情况下相同的元素,因此避免无限摘要掠夺。
相关文章:
- 使用滚动溢出-x进行无限循环
- 从index.html调用函数,该函数无限循环
- 使用jQuery无限循环播放HTML页面幻灯片
- Grunt任务没有加载,获得无限循环
- 如何在不进入无限循环的情况下将网站重定向到Facebook画布URL
- Backbone+RequireJS+Mediator模式导致视图逻辑短路和无限循环
- jQuery无限循环,动画化许多项目
- 如何避免试图用php+jquery显示php起始页的无限循环
- 6502仿真增强型基本无限循环$C000至$E0ED
- Angular ngRoute导致无限循环和堆栈溢出
- Jquery:无限循环和暂停
- 数组数组:无限循环
- MeteorJS使用流星调用和流星方法时的无限循环
- 如何无限循环数据集字符串
- jquery在无限循环中运行
- 遍历对象会导致无限循环
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- 角度编译指令似乎进入了无限循环
- 显示随机数js的无限循环
- 无限循环一组图像