ng-hide 和 ng-show 都不会改变元素的可见性
Neither ng-hide nor ng-show change the visibility of the element
我开始使用AngularJS,我决定让一个列表在我点击一个按钮时出现。
我的代码很简单,但是不起作用,我不明白为什么:
<div ng-app="myGame" ng-controller="gameCtrl">
<h1>{{showLevels}}</h1>
<p ng-show="showLevels">
<ul>
<li>Level 1</li>
<li>Level 2</li>
<li>Level 3</li>
</ul>
</p>
<button ng-click="toggle()">Begin Game !</button>
</div>
并且,在 JavaScript 文件中:
var app = angular.module("myGame", []);
app.controller("gameCtrl", function ($scope) {
$scope.showLevels = false;
$scope.toggle = function () {
$scope.showLevels = !$scope.showLevels;
};
});
无论我使用 ngShow
还是 ngHide
指令,级别始终显示,尽管 $scope.showLevels
已切换,正如我在标题旁边看到的那样。
这个问题从何而来?
paragraph element <p>
can only accept phrasing content, and the unordered list element <ul>
不是这样的内容
因此,您的浏览器会将您的代码翻译成另一个更有意义的代码,方法是从 <p>
中取出 <ul>
。您的 HTML 实际上是:
<p ng-show="showLevels"></p>
<ul>
<li>Level 1</li>
<li>Level 2</li>
<li>Level 3</li>
</ul>
这就是为什么您的列表始终可见,无论 $scope.showLevels
变量的内容如何。解决方案是使用另一个元素,例如 document division element <div>
,或者完全删除此中间元素:
<ul ng-show="showLevels">
<li>Level 1</li>
<li>Level 2</li>
<li>Level 3</li>
</ul>
我开始使用AngularJS,我决定让一个列表在我点击一个按钮时出现。 我的代码很简单,但是不起作用,我不明白为什么:
<div ng-app="myGame" ng-controller="gameCtrl">
<h1>{{showLevels}}</h1>
<p ng-show="showLevels">
<ul>
<li>Level 1</li>
<li>Level 2</li>
<li>Level 3</li>
</ul>
</p>
<button ng-click="toggle()">Begin Game !</button>
</div>
并且,在 JavaScript 文件中:
var app = angular.module("myGame", []);
app.controller("gameCtrl", function ($scope) {
$scope.showLevels = false;
$scope.toggle = function () {
$scope.showLevels = !$scope.showLevels;
};
});
无论我使用 ngShow
还是 ngHide
指令,级别始终显示,尽管 $scope.showLevels
已切换,正如我在标题旁边看到的那样。
这个问题从何而来?
paragraph element <p>
can only accept phrasing content, and the unordered list element <ul>
不是这样的内容
因此,您的浏览器会将您的代码翻译成另一个更有意义的代码,方法是从 <p>
中取出 <ul>
。您的 HTML 实际上是:
<p ng-show="showLevels"></p>
<ul>
<li>Level 1</li>
<li>Level 2</li>
<li>Level 3</li>
</ul>
这就是为什么您的列表始终可见,无论 $scope.showLevels
变量的内容如何。解决方案是使用另一个元素,例如 document division element <div>
,或者完全删除此中间元素:
<ul ng-show="showLevels">
<li>Level 1</li>
<li>Level 2</li>
<li>Level 3</li>
</ul>