如果我有一个像这样的角度的复选框:
<div ng-repeat="(key,option) in metaItem.fieldOptions">
<input type="checkbox"
name="metaField[]"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'"
ng-false-value="'{{null}}'">
{{option.optionPlaceholder}}
</div>
所以ng-model
,issueForView.metaData[subIndex].fieldValue[key]
最初是空的,就像这样:
{}
假设我点击供应商的选项,我明白了:
{"0":"Supplier"}
然后,如果我取消选择,我会得到这个:
{"0":""}
取消选择我想要的是:
{}
这是为了让它与我正在替换的代码保持一致。有什么建议吗?
答案 0 :(得分:4)
编辑2 - 根据评论修改答案:
根据评论,我了解您所拥有的对象模型如下:
metaItem.fieldOptions =
{0: {optionValue: "Supplier"},
1: {optionValue: "SomethingA"},
2: {optionValue: "SomethingB"}};
您希望所选值填充fieldValue
对象。因此,对于选定的键0
和2
,会出现以下内容:
issueForView.metaData[subIndex].fieldValue = {0: "Supplier", 2: "SomethingB"};
问题是如果你取消选择0
,你会得到这个:
issueForView.metaData[subIndex].fieldValue = {0: "", 2: "SomethingB"};
但你想要这个:
issueForView.metaData[subIndex].fieldValue = {2: "SomethingB"};
<强>答案:强>
如果您在undefined
中分配ng-false-value
:
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'" ng-false-value="undefined">
====
原始回答:
简单地说,您希望ng-model
中的模型集"some string"
为true
,空对象{}
- 如果false
,对吗? / p>
然后,只需将其设置为ng-true-value
和ng-false-value
:
<input type="checkbox"
ng-model="foo" ng-true-value="'some string'" ng-false-value="{}">
将其直接应用于您的示例,
<div ng-repeat="(key,option) in metaItem.fieldOptions">
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'"
ng-false-value="{}">
{{option.optionPlaceholder}}
</div>
修改强>
如果您想要将模型设置为对象而不是"some string"
,则可以提供内嵌硬编码的对象文字:
<input type="checkbox"
ng-model="foo" ng-true-value="{0: 'Supplier'}" ng-false-value="{}">
在你的例子中,这个对象是在ng-repeat
的迭代中动态设置的,那么如果你准备好了这个对象文字,那就更好了。
说,你有option.optionValue === {0: "Supplier"}
这个迭代(看起来不像你做的那样,但这是正确的方法,因为对象实际上是一个“选项值”),那么你可以设置如下:
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="{{option.optionValue}}" ng-false-value="{}">
如果您没有准备好并且需要“动态”构建它,则可以使用ng-init
。比如说,您示例中的"0"
来自option.optionKey
,"Supplier"
来自option.optionValue
:
<input type="checkbox"
ng-init="t = {}; t[option.optionKey] = option.optionValue"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="{{t}}" ng-false-value="{}">
答案 1 :(得分:0)
只需添加required
标记即可。
键值不会出现在表单对象中,除非它有效。
<div ng-repeat="(key,option) in metaItem.fieldOptions">
<input type="checkbox"
name="metaField[]"
required=""
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'"
ng-false-value="'{{null}}'">
{{option.optionPlaceholder}}
</div>