Javascript angularjs ng错误值设置为nothing
如果我在angular中有这样一个复选框: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
<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,好的,我想我理解你的对象模型,并修改了答案(见上半部分)。下次,请在问题中明确这个对象模型,以避免来回重复