Javascript angularjs ng错误值设置为nothing

Javascript angularjs ng错误值设置为nothing,javascript,angularjs,Javascript,Angularjs,如果我在angular中有这样一个复选框: <div ng-repeat="(key,option) in metaItem.fieldOptions"> <input type="checkbox" name="metaField[]" ng-model="issueForView.metaData[subIndex].fieldValue[key]" ng-true-value="'{{option

如果我在angular中有这样一个复选框:

<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>
{}
假设我点击供应商的选项,我得到:

{"0":"Supplier"}
{"0":""}
issueForView.metaData[subIndex].fieldValue = {0: "", 2: "SomethingB"};
然后,如果取消选择,我会得到以下结果:

{"0":"Supplier"}
{"0":""}
issueForView.metaData[subIndex].fieldValue = {0: "", 2: "SomethingB"};
取消选择后,我想要的是:

{}

这是为了让它与我正在替换的代码保持内联。有什么建议吗?

编辑2-根据评论修改答案:

从评论中,我了解到您拥有的对象模型大致如下:

metaItem.fieldOptions = 
  {0: {optionValue: "Supplier"}, 
   1: {optionValue: "SomethingA"}, 
   2: {optionValue: "SomethingB"}};
您希望所选的值填充
fieldValue
对象。因此,例如,对于选定的键
0
2
,将显示以下内容:

issueForView.metaData[subIndex].fieldValue = {0: "Supplier", 2: "SomethingB"};
问题是如果取消选择
0
,您会得到以下结果:

{"0":"Supplier"}
{"0":""}
issueForView.metaData[subIndex].fieldValue = {0: "", 2: "SomethingB"};
但是你想要这个:

issueForView.metaData[subIndex].fieldValue = {2: "SomethingB"};
回答: 如果在
ng假值中指定
undefined
,则很容易解决此问题:

<input type="checkbox" 
       ng-model="issueForView.metaData[subIndex].fieldValue[key]" 
       ng-true-value="'{{option.optionValue}}'" ng-false-value="undefined">
<input type="checkbox" 
       ng-model="foo" ng-true-value="'some string'" ng-false-value="{}">
<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="{}">    
要将其直接应用于您的示例

<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>
在您的示例中,如果在
ng repeat
的迭代中动态设置此对象,那么最好准备好该对象

比方说,您在这个迭代中使用了
option.optionValue==={0:“供应商”}
(看起来不像,但这是正确的方法,因为对象实际上是一个“选项值”),然后您可以这样设置它:

<input type="checkbox" 
       ng-model="issueForView.metaData[subIndex].fieldValue[key]" 
       ng-true-value="{{option.optionValue}}" ng-false-value="{}">

只需添加
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>

{{option.optionPlaceholder}

对象最初为空-哪个对象?你不需要
{{
ng真值
ng假值
是什么?当我说对象初始为空时,你应该只使用
ng模型
issueForView.metaData[subIndex].fieldValue[key]
,我将更新问题。因此,如果我选择供应商,
ng model
=
{0:“supplier”}
,然后单击off,使用此技术,我将获得
ng model
=
{0:{}}
。单击off时我想要的是
ng model
=
{
。我目前正在剥离控制器中的空/假值,但如果能在那时将其全部解决,那就太好了。@Octopi,这个对象在哪里
{0:“供应商”}
来自?无论如何-我对问题进行了修改,但请下次在问题道歉中提供此类相关信息,
{0:“供应商”}
是ng模型,因此复选框
0
的真实值为
Supplier
。因此
issueForView.metaData[subIndex].fieldValue[0]
=
供应商
@Octopi,好的,我想我理解你的对象模型,并修改了答案(见上半部分)。下次,请在问题中明确这个对象模型,以避免来回重复