angularjs ng-false-value设置为空

时间:2015-02-25 17:29:28

标签: javascript angularjs

如果我有一个像这样的角度的复选框:

<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-modelissueForView.metaData[subIndex].fieldValue[key]最初是空的,就像这样:

{}

假设我点击供应商的选项,我明白了:

{"0":"Supplier"}

然后,如果我取消选择,我会得到这个:

{"0":""}

取消选择我想要的是:

{}

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

2 个答案:

答案 0 :(得分:4)

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

根据评论,我了解您所拥有的对象模型如下:

metaItem.fieldOptions = 
  {0: {optionValue: "Supplier"}, 
   1: {optionValue: "SomethingA"}, 
   2: {optionValue: "SomethingB"}};

您希望所选值填充fieldValue对象。因此,对于选定的键02,会出现以下内容:

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">

plunker

====

原始回答:

简单地说,您希望ng-model中的模型集"some string"true,空对象{} - 如果false,对吗? / p>

然后,只需将其设置为ng-true-valueng-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>