我正在尝试学习角度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
复选框将其绑定到布尔true
或false
。因此,以这样一种方式更改您的代码,即只要有检查true
或false
,它应该是布尔值而不是字符串'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>