【发布时间】:2015-10-22 18:16:17
【问题描述】:
这里是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-model,然后把我的逻辑放在一个 ng-change 中。但是,我正在尝试制作一个不会创建任何不必要的模型变量的下拉菜单。相反,我希望将逻辑放在 getter/setter 中,这对我来说似乎更合适。 vm.orgTypes 之一是 { ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null },我希望这将是我的默认值,而不是我得到这个摘要错误,不明白它来自哪里。
【问题讨论】:
-
watch 在这种情况下检查等于引用,如果您返回
{ ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null },则每个检查都返回 new 对象。如果您在集合中有相同的对象 - 只需像return orgType.selectedOrgType || vm.orgTypes[0]一样使用它。或者只是保存在变量中:var defVal = { ORGANIZATION_TYPE: 'Organization Type', ORGANIZATION_TYPE_ID: null }并使用return orgType.selectedOrgType || defVal -
@Grundy 想要添加答案?
标签: javascript angularjs