ng AngularJs中的真实值和必需值 请确认信息是正确的

ng AngularJs中的真实值和必需值 请确认信息是正确的,angularjs,Angularjs,我觉得ng required有问题。如果没有required或ng-required则工作正常。如果我没有选中复选框,它将返回错误消息。但是还有一个问题:尽管我选中了复选框,form.$valid=false。这就是为什么我尝试使用required或ng required。您可能要求我删除ng真值并使用必需的。我知道这也行。但问题是我在控制器中加载了formData.acknowledge=“true”,因此当页面加载时,必须选中复选框。所以我不得不使用ng真值。有人能帮我吗?一般模式 您应该从

我觉得
ng required
有问题。如果没有
required
ng-required
则工作正常。如果我没有选中复选框,它将返回错误消息。但是还有一个问题:尽管我选中了复选框,
form.$valid=false
。这就是为什么我尝试使用
required
ng required
。您可能要求我删除
ng真值
并使用
必需的
。我知道这也行。但问题是我在控制器中加载了
formData.acknowledge=“true”
,因此当页面加载时,必须选中复选框。所以我不得不使用
ng真值
。有人能帮我吗?

一般模式 您应该从控制器获取所需的任何数据绑定。如有必要,这些数据应该来自您注入或依赖的服务。听起来你大概是在遵循这一点

真实值 如果您想要的不是真或假,那么只需要使用ng true value

可能出了什么问题 在控制器中,如果需要的话,您可能应该将属性默认为
true

<input type="checkbox" id="acknowledge" name="acknowledge" 
       ng-model="formData.acknowledge" 
       ng-true-value="true" 
       ng-required="formData.acknowledge !='true'"/>

<div ng-show="(peopleworksForm.acknowledge.$dirty || peopleworksForm.submited)  && formData.acknowledge !='true'">
   Please acknowledge that the information is correct</div>

您应该做您需要的一切。

由于您已经回答了自己的问题,您可以删除ng true值并使用所需的:

<input type="checkbox" id="acknowledge" name="acknowledge" 
       ng-model="formData.acknowledge" 
       ng-true-value="true" 
       ng-required="formData.acknowledge !='true'"/>

<div ng-show="(peopleworksForm.acknowledge.$dirty || peopleworksForm.submited)  && formData.acknowledge !='true'">
   Please acknowledge that the information is correct</div>
informationAcknowledgeOnlineRegistrationChange = true;  // replace value you get from your service

要重申,您希望通过选中表单或复选框的
$valid
状态,在未选中复选框
acknowledge
时显示消息

此外,当分配
“true”
-字符串值,而不是
true
-布尔值时,应从控制器中选中该复选框

正确的做法是,您需要使用
ng true value
重新定义为选中状态提供给模型的值。但是,您使用的
ng true value
不正确,因为您没有指定字符串值,而是指定布尔值

正确的方法如下(注意双引号
“'
):


此外,您不需要将
ng required
与表达式一起使用-这将使控件在条件基础上成为必需的,我认为您希望它始终是“必需的”。

当您不选中复选框时,没有提供与ng required相反的值。这里您可以做的是,当用户没有为复选框提供任何值时,为复选框设置默认值

我尝试尽可能地修复此问题,以使问题更具可读性。请编辑它以提供以下2个(且仅2个)问题的答案:1)您想要实现的目标,2)现在发生的事情是错误的。如果您删除了“ng required”,它会很好地工作。但是,尽管我没有勾选复选框,“peopleworksForm.$valid”变为真。如果我这样做(包括ng required),则“formData.acknowledge”的值始终为FALSE。我想要的是正常的验证行为–因此,您希望表单对未选中复选框无效?是。。你说得对。但是“ng真正的价值”应该在那里……啊,我想我明白了。您的真实值是
“true”
-string,而不是
true
-boolean。问题是我无法更改控制器中的值集。我希望从视图方面获得解决方案。。否则我也会做同样的事。答案很难找到。在您的plunket中,它工作得很好。但只要我把“ng true value”$scope.foo=false始终和$valid false放在一起,我的值就会被删除。我不明白你怎么了this@LasalSethiya,嗯,你需要复制你的问题,或者根据我的plunker重建。您好,新开发人员-正如您所说,即使我在plunker中应用了我的场景,它也能在plunker中工作。但在我的环境中,它总是返回false(布尔值)。正如我在上面所做的,它可以工作,但如果我只包含ng真值,它会再次返回false(布尔值),所以无论我像上面那样包含它。还有两个问题1)我第一次检查时,它返回ng false值,然后正常工作。2) 我真正想做的是不检查“formData.DeclarationAcknowledge”是否有值,它是否等于true。如果我这样做,它将再次返回false(布尔值)always@LasalSethiya,您使用的是什么角度版本?而且,您似乎再次没有正确设置
ng true value
——它应该是
ng true value=“'true'”
(带双引号和单引号)
formData.acknowledge = true; //not 'true' as string
<input type="checkbox" name="foo"
       ng-model="foo" ng-true-value="'true'" required>
$scope.foo = "true";