ANGULAR JS ng-if



我正在尝试学习角度JS,我是一个绝对的初学者。我尝试使用ng-if指令根据他们的性别和关系状态打印"先生或夫人或女士"。当我在div 标签中绑定已婚模型时,它会给出正确的值。但之后的装订每次都打印为真。还有其他方法可以检查条件吗? 此外,我尝试使用控制器检查条件,为什么不起作用?请帮忙!

<body ng-app="myApp" ng-controller="myFirstController" ng- init="first='';last='';gender='Male';married='true'">
<input type="text" data-ng-model="first">
<input type="text" data-ng-model="last">
<label for="gender">GENDER </label>
<input type="radio" name="gender" data-ng-model="gender" value="Male" /> MALE
<input type="radio" name="gender" data-ng-model="gender" value="Female" /> FEMALE
<br>
<br>
<div ng-if="gender==='Female'">
<input type="radio" name="married" data-ng-model="married" value="true" /> MARRIED
<input type="radio" name="married" data-ng-model="married" value="false" /> UNMARRIED
<br>
<br> {{married}}
</div>
<span ng-if="gender==='Male'">MR.</span>
<span ng-if="gender!=='Male'">
<span ng-if="married=='true'">MRS.</span>
<span ng-if="married=='false'">MS.</span> </span>{{first }} {{last}} {{married}}
<div ng-app="" ng-init="myCol='lightblue'">

ng-if="gender==='Female'"替换为ng-show="gender==='Female'",它将正常工作。

原因是ng-if创建自己的子作用域,因此在此子作用域而不是控制器作用域上设置married属性。

适当的解决方法是避免直接绑定到范围的属性,而是绑定到作用域中对象的属性:

在控制器中:

$scope.model = {};

在您看来:

<input type="radio" name="married" data-ng-model="model.married" value="true"/>

(当然,您的所有属性都一样(。

您也不应该使用ng-init.只需从控制器初始化模型:

$scope.model = {
gender: 'Male',
married: 'false'
};

最后,布尔值对于包含"true"或"false"的字符串married值来说是一个更好的选择。您可以使用 ng 值而不是值来实现这一点:

<input type="radio" name="married" data-ng-model="married" ng-value="true"/> 
MARRIED 
<input type="radio" name="married" data-ng-model="married" ng-value="false"/> 
UNMARRIED
<span ng-if="married">MRS.</span>
<span ng-if="!married">MS.</span>

完整演示

问题是您的检查是针对像<span ng-if="married=='true'">MRS.</span>这样的字符串,但输入ng-model复选框将其绑定到布尔truefalse。因此,以这样一种方式更改您的代码,即只要有检查truefalse,它应该是布尔值而不是字符串'true''false'

<span ng-if="married=='true'">MRS.</span>
<span ng-if="married=='false'">MRS.</span>

应该是

<span ng-if="married">MRS.</span>
<span ng-if="!married">MRS.</span>

最新更新