我在有角度的应用程序中有一种奇怪的行为,我不知道这是一个错误还是一个已知的限制:
'use strict';
var ctrl = function ($scope) {
$scope.foo = false;
};

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="ctrl">
foo: {{foo}}
<div ng-if="foo" style="background-color: #f00;">
<p>foo</p>
</div>
<div ng-if="!foo">
<br/><button ng-click="foo = true;">Show foo</button>
</div>
<button ng-click="foo = true">Show foo</button>
</div>
&#13;
我希望点击其中一个按钮会设置foo = true
,但点击第一个按钮(ng-if="!foo"
内)并不会更改模型。
经测试的版本为1.2.1
。
答案 0 :(得分:25)
ng-if
有自己的范围,因此您需要使用:
<br/><button ng-click="$parent.foo = true;">Show foo</button>
更新了小提琴:http://jsfiddle.net/78R52/1/
答案 1 :(得分:4)
啊,ng-if
创造了一个新范围!所以,“模型名称中必须有一个点”!
答案 2 :(得分:0)
正如其他人所说,ng-if有自己的范围。 我想说的是,在视图中放置表达式是一种不好的做法。好的做法是在视图中调用范围函数。
var ctrl = function($scope){
$scope.foo = false;
$scope.fn = fn;
function fn(){
$scope.foo = true;
}
/////
<div ng-app ng-controller="ctrl">
foo: {{foo}}
<div ng-if="foo" style="background-color: #f00;">
<p>foo</p>
</div>
<div ng-if="!foo">
<br/><button ng-click="fn()">Show foo</button>
</div>
<button ng-click="fn()">Show foo</button>
</div>