Pau*_*ley 5 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>
Run Code Online (Sandbox Code Playgroud)
所以ng-model,issueForView.metaData[subIndex].fieldValue[key]最初是空的,它是这样的:
{}
Run Code Online (Sandbox Code Playgroud)
说我点击供应商的选项,我得到这个:
{"0":"Supplier"}
Run Code Online (Sandbox Code Playgroud)
然后,如果我取消选择,我得到这个:
{"0":""}
Run Code Online (Sandbox Code Playgroud)
取消选择我想要的是:
{}
Run Code Online (Sandbox Code Playgroud)
这是为了使其与我正在替换的代码保持一致.有什么建议?
编辑 2 - 根据评论修改答案:
从评论中,我了解到您拥有的对象模型如下:
metaItem.fieldOptions =
{0: {optionValue: "Supplier"},
1: {optionValue: "SomethingA"},
2: {optionValue: "SomethingB"}};
Run Code Online (Sandbox Code Playgroud)
并且您希望选定的值填充该fieldValue对象。因此,对于选定的键0和2,将出现以下内容:
issueForView.metaData[subIndex].fieldValue = {0: "Supplier", 2: "SomethingB"};
Run Code Online (Sandbox Code Playgroud)
问题是如果你取消选择0,你会得到这个:
issueForView.metaData[subIndex].fieldValue = {0: "", 2: "SomethingB"};
Run Code Online (Sandbox Code Playgroud)
但你想要这个:
issueForView.metaData[subIndex].fieldValue = {2: "SomethingB"};
Run Code Online (Sandbox Code Playgroud)
答案:undefined如果您分配了以下内容
,那么这个问题很容易解决ng-false-value:
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="'{{option.optionValue}}'" ng-false-value="undefined">
Run Code Online (Sandbox Code Playgroud)
====
原答案:
简而言之,您希望模型设置ng-model为"some string"iftrue和空对象{}- if false,对吧?
然后,只需将它们设置为ng-true-value和ng-false-value:
<input type="checkbox"
ng-model="foo" ng-true-value="'some string'" ng-false-value="{}">
Run Code Online (Sandbox Code Playgroud)
要将其直接应用到您的示例中,
<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>
Run Code Online (Sandbox Code Playgroud)
编辑:
"some string"如果您想要将模型设置为对象而不是,则可以提供硬编码内联的对象文字:
<input type="checkbox"
ng-model="foo" ng-true-value="{0: 'Supplier'}" ng-false-value="{}">
Run Code Online (Sandbox Code Playgroud)
在您的示例中,该对象是在ng-repeat的迭代中动态设置的,那么如果您准备好该对象文字,那就更好了。
比如说,您进行option.optionValue === {0: "Supplier"}了这次迭代(看起来不像您所做的那样,但这将是正确的方法,因为该对象实际上是一个“选项值”),那么您可以像这样设置它:
<input type="checkbox"
ng-model="issueForView.metaData[subIndex].fieldValue[key]"
ng-true-value="{{option.optionValue}}" ng-false-value="{}">
Run Code Online (Sandbox Code Playgroud)
如果您没有准备好它并且需要“即时”构建它,您可以使用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="{}">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4259 次 |
| 最近记录: |