控制器
function MainController($scope, $rootScope, $location, $route) {
$scope.EditMode = false;
$scope.Click = function () {
$scope.EditMode = !$scope.EditMode;
};
}
HTML
<button ng-if="!EditMode" ng-click="$parent.EditMode = !$parent.EditMode">Button1</button>
<button ng-if="!EditMode" ng-click="EditMode = !EditMode">Button2</button>
<button ng-if="!EditMode" ng-click="Click()">Button3</button>
Button1 - 工作
Button2 - 不工作
Button3 - 工作
为什么Button2不起作用?
答案 0 :(得分:3)
当您添加指令ng-if
时,它会创建新范围。
新范围与父范围具有相同的值。这就是为什么button1
和button3
有效。
Buttons2不起作用,因为当你执行EditMode = !EditMode
时,它会在新范围内创建名为EditMode
的新变量。
您有几种方法可以解决它。最简单的方法是将所有ng-if
替换为ng-show
<button ng-show="!EditMode" ng-click="$parent.EditMode = !$parent.EditMode">Button1</button>
<button ng-show="!EditMode" ng-click="EditMode = !EditMode">Button2</button>
<button ng-show="!EditMode" ng-click="Click()">Button3</button>
将EditMode
作为对象。保留ng-if
这样,新范围不会覆盖父范围。
function MainController($scope, $rootScope, $location, $route) {
$scope.EditMode = {value:false};
$scope.Click = function () {
$scope.EditMode.value = !$scope.EditMode.value;
};
}
<button ng-if="!EditMode.value" ng-click="EditMode.value = !EditMode.value">Button1</button>
<button ng-if="!EditMode.value" ng-click="EditMode.value = !EditMode.value">Button2</button>
<button ng-if="!EditMode.value" ng-click="Click()">Button3</button>
答案 1 :(得分:0)
因为ngIf定义了自己的范围,原型继承自其父范围(就像ngRepeat一样)。因此,当您更改ngIf中的字段值时,您可以在ngIf范围内更改它,而不是在其父范围内。