模型不会在ng-if内更新

时间:2013-11-19 09:17:03

标签: javascript angularjs angular-ng-if

我在有角度的应用程序中有一种奇怪的行为,我不知道这是一个错误还是一个已知的限制:



'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;
&#13;
&#13;

http://jsfiddle.net/78R52/

我希望点击其中一个按钮会设置foo = true,但点击第一个按钮(ng-if="!foo"内)并不会更改模型。

经测试的版本为1.2.1

3 个答案:

答案 0 :(得分:25)

ng-if有自己的范围,因此您需要使用:

<br/><button ng-click="$parent.foo = true;">Show foo</button>

更新了小提琴:http://jsfiddle.net/78R52/1/

答案 1 :(得分:4)

啊,ng-if创造了一个新范围!所以,“模型名称中必须有一个点”!

http://jsfiddle.net/78R52/2/

答案 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>