有没有办法在 html div 上执行 ng-hide?
Is there a way to do a ng-hide on a html div?
我试图在有 ng-click 事件的地方隐藏具有 id="crossfade" 的 div。
1) 这可能吗?
2) 我做错了什么?
<!DOCTYPE html>
<html lang="en" ng-app="myContent">
<head>
<meta charset="UTF-8">
<title>ShopME Tops</title>
<link rel="stylesheet" type="text/css" href="mystyle.css"/>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/4.7.0/css/font-awesome.min.css">
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<script type="text/javascript"src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js
"></script>
<script type="text/javascript" src="myscript.js"></script>
</head>
<body ng-controller="ContentController">
<header>
<div class="header-inner2">
<nav>
<ul class="center">
<li><a ng-click="getData('SWIMWEAR')">SWIMWEAR</a></li>
<li><a ng-click="getData('TOPS')">TOPS</a></li>
<li><a ng-click="getData('BOTTOMS')">BOTTOMS</a></li>
<li><a ng-click="getData('DRESSES')">DRESSES</a></li>
<li><a ng-click="getData('SHOES')">SHOES</a></li>
<li><a ng-click="getData('ACCESSORIES')">ACCESSORIES</a
</li>
</ul>
</nav>
</div>
</header>
<!-- crossfade images-->
<div id= "crossfade" ng-hide="getData('TOPS')">
<img src="images/cover1.png" alt="#">
<img src="images/cover2.png" alt="#">
<img src="images/cover3.png" alt="#">
<img src="images/cover4.png" alt="#">
<img src="images/cover5.png" alt="#">
</div>
<!-- Container for grid layout -->
<div class="container">
<div class="row">
<div class="col" ng-repeat="x in filtered | limitTo:4">
<img class="img-responsive1" ng-src="{{x.source}}" alt="#">
</div>
</div>
</div>
</body>
</html>
所以基本上,只要单击导航栏中的某些内容,我就想隐藏淡入淡出 div。
这是我正在使用的代码行:
<div id= "crossfade" ng-hide="getData('TOPS')">
所以特别是,当点击 TOPS 时隐藏 div 淡入淡出。
当我加载页面时并没有发生这种情况,我得到了我的淡入淡出和我的 TOPS 数据,但我无法点击其他任何东西。
我还尝试过 ng-if 和 ng-init。 Ng-init 几乎可以工作,但我的交叉淡入淡出没有在 angular.js 中实现它主要是 css。
如果它们在同一个控制器中,您只需将范围变量设置为 ng-hide。类似于:
$scope.hideCrossfade = false;
function getData(mType) {
$scope.hideCrossfade = true;
}
在你的 html
<div id="crossfade" ng-hide="hideCrossfade">
如果您的 header 控制器和内容控制器分开,您将需要使用 $broadcast
在你的header控制器中:
$scope.getData = function(mType) {
$scope.$broadcast('hideCrossfade', true);
};
并在您的内容控制器中
var deregisterFn = $scope.$on('hideCrossfade', function($event, hide) {
$scope.hideCrossfade = hide;
};
<div id= "crossfade" ng-hide="hideCrossfade">
<img src="images/cover1.png" alt="#">
<img src="images/cover2.png" alt="#">
<img src="images/cover3.png" alt="#">
<img src="images/cover4.png" alt="#">
<img src="images/cover5.png" alt="#">
</div>
并在控制器中设置
$scope.hideCrossfade = true;
可能在函数 getData 中。
我建议不要在 angular 中使用 ID。
此外,ng-show, ng-hide, ng-if = "someFunction()" 通常也不推荐使用。
是的,这绝对有可能。 ng-hide
需要一个布尔值,true 或 false。 getData('Tops')
是否在您的控制器中返回布尔值?我建议使用 $scope 变量而不是函数来控制 ng-hide
的行为。因此,在您的 getData()
函数中,您可以分配如下内容:$scope.hideCrossfade = true;
。
那么在你看来,就用<div id= "crossfade" ng-hide="hideCrossfade">
吧。您始终可以在控制器中更改 $scope.hideCrossfade = false;
以使 div 再次可见。
在没有看到 getData
函数的情况下很难确切地找出问题所在,但据我所知,这里有一些建议
首先,永远不要绑定到一个函数,它很难调试并且性能代价高昂。
这是一个可行的解决方案。我建议为每个项目硬编码属性或使用数组。为了简单起见,我在这里使用了一个 属性。
HTML
<header>
<div class="header-inner2">
<nav>
<ul class="center">
<li><a ng-click="showSwimwear()">SWIMWEAR</a></li>
...
</ul>
</nav>
</div>
</header>
<div id= "crossfade" ng-hide="swimwearVisible">
<img src="images/cover1.png" alt="#">
...
</div>
JS
swimwearVisible = false;
showSwimwear(){
this.swimwearVisible = !this.swimwearVisible;
}
一切顺利,当您单击 link 时,div 将显示和隐藏。它还会显示当前状态以帮助您调试。
我试图在有 ng-click 事件的地方隐藏具有 id="crossfade" 的 div。
1) 这可能吗? 2) 我做错了什么?
<!DOCTYPE html>
<html lang="en" ng-app="myContent">
<head>
<meta charset="UTF-8">
<title>ShopME Tops</title>
<link rel="stylesheet" type="text/css" href="mystyle.css"/>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/4.7.0/css/font-awesome.min.css">
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<script type="text/javascript"src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js
"></script>
<script type="text/javascript" src="myscript.js"></script>
</head>
<body ng-controller="ContentController">
<header>
<div class="header-inner2">
<nav>
<ul class="center">
<li><a ng-click="getData('SWIMWEAR')">SWIMWEAR</a></li>
<li><a ng-click="getData('TOPS')">TOPS</a></li>
<li><a ng-click="getData('BOTTOMS')">BOTTOMS</a></li>
<li><a ng-click="getData('DRESSES')">DRESSES</a></li>
<li><a ng-click="getData('SHOES')">SHOES</a></li>
<li><a ng-click="getData('ACCESSORIES')">ACCESSORIES</a
</li>
</ul>
</nav>
</div>
</header>
<!-- crossfade images-->
<div id= "crossfade" ng-hide="getData('TOPS')">
<img src="images/cover1.png" alt="#">
<img src="images/cover2.png" alt="#">
<img src="images/cover3.png" alt="#">
<img src="images/cover4.png" alt="#">
<img src="images/cover5.png" alt="#">
</div>
<!-- Container for grid layout -->
<div class="container">
<div class="row">
<div class="col" ng-repeat="x in filtered | limitTo:4">
<img class="img-responsive1" ng-src="{{x.source}}" alt="#">
</div>
</div>
</div>
</body>
</html>
所以基本上,只要单击导航栏中的某些内容,我就想隐藏淡入淡出 div。
这是我正在使用的代码行:
<div id= "crossfade" ng-hide="getData('TOPS')">
所以特别是,当点击 TOPS 时隐藏 div 淡入淡出。
当我加载页面时并没有发生这种情况,我得到了我的淡入淡出和我的 TOPS 数据,但我无法点击其他任何东西。
我还尝试过 ng-if 和 ng-init。 Ng-init 几乎可以工作,但我的交叉淡入淡出没有在 angular.js 中实现它主要是 css。
如果它们在同一个控制器中,您只需将范围变量设置为 ng-hide。类似于:
$scope.hideCrossfade = false;
function getData(mType) {
$scope.hideCrossfade = true;
}
在你的 html
<div id="crossfade" ng-hide="hideCrossfade">
如果您的 header 控制器和内容控制器分开,您将需要使用 $broadcast
在你的header控制器中:
$scope.getData = function(mType) {
$scope.$broadcast('hideCrossfade', true);
};
并在您的内容控制器中
var deregisterFn = $scope.$on('hideCrossfade', function($event, hide) {
$scope.hideCrossfade = hide;
};
<div id= "crossfade" ng-hide="hideCrossfade">
<img src="images/cover1.png" alt="#">
<img src="images/cover2.png" alt="#">
<img src="images/cover3.png" alt="#">
<img src="images/cover4.png" alt="#">
<img src="images/cover5.png" alt="#">
</div>
并在控制器中设置
$scope.hideCrossfade = true;
可能在函数 getData 中。
我建议不要在 angular 中使用 ID。 此外,ng-show, ng-hide, ng-if = "someFunction()" 通常也不推荐使用。
是的,这绝对有可能。 ng-hide
需要一个布尔值,true 或 false。 getData('Tops')
是否在您的控制器中返回布尔值?我建议使用 $scope 变量而不是函数来控制 ng-hide
的行为。因此,在您的 getData()
函数中,您可以分配如下内容:$scope.hideCrossfade = true;
。
那么在你看来,就用<div id= "crossfade" ng-hide="hideCrossfade">
吧。您始终可以在控制器中更改 $scope.hideCrossfade = false;
以使 div 再次可见。
在没有看到 getData
函数的情况下很难确切地找出问题所在,但据我所知,这里有一些建议
首先,永远不要绑定到一个函数,它很难调试并且性能代价高昂。
这是一个可行的解决方案。我建议为每个项目硬编码属性或使用数组。为了简单起见,我在这里使用了一个 属性。
HTML
<header>
<div class="header-inner2">
<nav>
<ul class="center">
<li><a ng-click="showSwimwear()">SWIMWEAR</a></li>
...
</ul>
</nav>
</div>
</header>
<div id= "crossfade" ng-hide="swimwearVisible">
<img src="images/cover1.png" alt="#">
...
</div>
JS
swimwearVisible = false;
showSwimwear(){
this.swimwearVisible = !this.swimwearVisible;
}
一切顺利,当您单击 link 时,div 将显示和隐藏。它还会显示当前状态以帮助您调试。