ng-show 设置为 false 不会在页面加载时隐藏元素
ng-show set as false doesn't hide element at page load
我有这段代码,使用 Angular 1.3,我希望 div 和 ng-show 指令在我首先加载页面时不显示:
<div class="stuff">
<uib-accordion close-others="false">
<div ng-show="element.visible" ng-repeat="element in elements" ng-if="element.active" uib-accordion-group ng-class="element.open? 'colorBackgroundBlue':'black'" class="panel-default yellow" is-open="element.open">
<uib-accordion-heading>
{{element.title}} ({{element.number}})
</uib-accordion-heading>
<div class="scrollable-accordion" ng-if="element.numberOfElements!=0">
</div>
</div>
</uib-accordion>
</div>
element.visible
布尔值在控制器中设置为 false:
$scope.elements = [{
status: 0,
title: blabla,
number: 0,
open: false,
active: false,
visible: false
}, {
status: 1,
title: blob,
number: 0,
open: false,
active: false,
visible: false
}]
出于某种原因,ng-show 似乎已正确设置为 false,但该元素仍会显示。如果我将一个按钮绑定到 visible
布尔值并在浏览器中更改它,则该元素会正确显示和消失。
元素在页面加载时可见,因为范围尚未链接到指令。 ng-cloak 可以解决您的问题
尝试使用ng-cloak
ngCloak
指令用于防止 AngularJS html 模板在您的应用程序加载时以其原始(未编译)形式被浏览器短暂显示。
<div id="template1" ng-cloak>{{ 'hello' }}</div>
您正在使用两者 ng-if and ng-show。尝试删除其中的任何一个。两者的目的相同。
并且还使用 ng-cloak 来防止 AngularJS html 模板在您的应用程序加载时以其原始(未编译)形式被浏览器短暂显示。
var app = angular.module("app", []);
app.controller("ctrl", function($scope) {
$scope.elements = [{
status: 0,
title: 'blabla',
number: 0,
open: false,
active: false,
visible: false
}, {
status: 1,
title: 'blob',
number: 0,
open: false,
active: false,
visible: false
}];
$scope.ShowHide = function(){
angular.forEach($scope.elements, function(element){
element.visible=!element.visible;
element.active=!element.active;
alert(element.visible);
});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<div class="stuff">
<uib-accordion close-others="false">
<div ng-cloak ng-show="element.visible" ng-repeat="element in elements" ng-if="element.active" uib-accordion-group ng-class="element.open? 'colorBackgroundBlue':'black'" class="panel-default yellow" is-open="element.open">
<uib-accordion-heading>
{{element.title}} ({{element.number}})
</uib-accordion-heading>
<div class="scrollable-accordion" ng-if="element.numberOfElements!=0">
</div>
</div>
</uib-accordion>
<button ng-click="ShowHide()">Make visible</button>
</div>
</div>
对于在 angular 中使用 uib-accordions 遇到相同问题的任何人。
事实证明,如果最初设置为 false 并在 uib-accordion 标记内使用,ng-show 将无法正常工作。我为解决这个问题所做的是将手风琴包裹在 div 中,然后在 div 上使用 ng-show。像这样:
<div class="stuff">
<div ng-show="element.visible" ng-repeat="element in elements" >
<uib-accordion close-others="false">
<div ng-if="element.active" uib-accordion-group ng-class="element.open? 'colorBackgroundBlue':'black'" class="panel-default yellow" is-open="element.open">
<uib-accordion-heading>
{{element.title}} ({{element.number}})
</uib-accordion-heading>
<div class="scrollable-accordion" ng-if="element.numberOfElements!=0">
</div>
</div>
</uib-accordion>
</div>
</div>
注意:问题仅发生在页面加载时,并且仅出现在 ng-show 和 ng-hide 中,而 ng-if 似乎在 <uib-accordion>
中运行良好。感谢所有试图提供帮助的人。
添加
class="ng-hide" 以及 ng-cloak。
<span class="bag-badge bag-melon ng-hide" ng-show="itemsincart>0" ng-cloak>{{itemsincart}}</span>
它对我有用,它避免了页面加载时元素的闪烁。
我有这段代码,使用 Angular 1.3,我希望 div 和 ng-show 指令在我首先加载页面时不显示:
<div class="stuff">
<uib-accordion close-others="false">
<div ng-show="element.visible" ng-repeat="element in elements" ng-if="element.active" uib-accordion-group ng-class="element.open? 'colorBackgroundBlue':'black'" class="panel-default yellow" is-open="element.open">
<uib-accordion-heading>
{{element.title}} ({{element.number}})
</uib-accordion-heading>
<div class="scrollable-accordion" ng-if="element.numberOfElements!=0">
</div>
</div>
</uib-accordion>
</div>
element.visible
布尔值在控制器中设置为 false:
$scope.elements = [{
status: 0,
title: blabla,
number: 0,
open: false,
active: false,
visible: false
}, {
status: 1,
title: blob,
number: 0,
open: false,
active: false,
visible: false
}]
出于某种原因,ng-show 似乎已正确设置为 false,但该元素仍会显示。如果我将一个按钮绑定到 visible
布尔值并在浏览器中更改它,则该元素会正确显示和消失。
元素在页面加载时可见,因为范围尚未链接到指令。 ng-cloak 可以解决您的问题
尝试使用ng-cloak
ngCloak
指令用于防止 AngularJS html 模板在您的应用程序加载时以其原始(未编译)形式被浏览器短暂显示。
<div id="template1" ng-cloak>{{ 'hello' }}</div>
您正在使用两者 ng-if and ng-show。尝试删除其中的任何一个。两者的目的相同。
并且还使用 ng-cloak 来防止 AngularJS html 模板在您的应用程序加载时以其原始(未编译)形式被浏览器短暂显示。
var app = angular.module("app", []);
app.controller("ctrl", function($scope) {
$scope.elements = [{
status: 0,
title: 'blabla',
number: 0,
open: false,
active: false,
visible: false
}, {
status: 1,
title: 'blob',
number: 0,
open: false,
active: false,
visible: false
}];
$scope.ShowHide = function(){
angular.forEach($scope.elements, function(element){
element.visible=!element.visible;
element.active=!element.active;
alert(element.visible);
});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<div class="stuff">
<uib-accordion close-others="false">
<div ng-cloak ng-show="element.visible" ng-repeat="element in elements" ng-if="element.active" uib-accordion-group ng-class="element.open? 'colorBackgroundBlue':'black'" class="panel-default yellow" is-open="element.open">
<uib-accordion-heading>
{{element.title}} ({{element.number}})
</uib-accordion-heading>
<div class="scrollable-accordion" ng-if="element.numberOfElements!=0">
</div>
</div>
</uib-accordion>
<button ng-click="ShowHide()">Make visible</button>
</div>
</div>
对于在 angular 中使用 uib-accordions 遇到相同问题的任何人。
事实证明,如果最初设置为 false 并在 uib-accordion 标记内使用,ng-show 将无法正常工作。我为解决这个问题所做的是将手风琴包裹在 div 中,然后在 div 上使用 ng-show。像这样:
<div class="stuff">
<div ng-show="element.visible" ng-repeat="element in elements" >
<uib-accordion close-others="false">
<div ng-if="element.active" uib-accordion-group ng-class="element.open? 'colorBackgroundBlue':'black'" class="panel-default yellow" is-open="element.open">
<uib-accordion-heading>
{{element.title}} ({{element.number}})
</uib-accordion-heading>
<div class="scrollable-accordion" ng-if="element.numberOfElements!=0">
</div>
</div>
</uib-accordion>
</div>
</div>
注意:问题仅发生在页面加载时,并且仅出现在 ng-show 和 ng-hide 中,而 ng-if 似乎在 <uib-accordion>
中运行良好。感谢所有试图提供帮助的人。
添加
class="ng-hide" 以及 ng-cloak。
<span class="bag-badge bag-melon ng-hide" ng-show="itemsincart>0" ng-cloak>{{itemsincart}}</span>
它对我有用,它避免了页面加载时元素的闪烁。