ng-show 未更新 DOM 元素
ng-show not updating DOM element
我正在尝试动态切换 ng-show 值。
我有一个控制器有两种方法,一种显示,一种隐藏:
var HeaderCtrl = this;
HeaderCtrl.HelpButtonVisible = "false";
HeaderCtrl.HideHelpButton = function() {
HeaderCtrl.HelpButtonVisible = "false";
}
HeaderCtrl.ShowHelpButton = function() {
HeaderCtrl.HelpButtonVisible = "true";
}
这是一开始隐藏的按钮。也用于调用会隐藏自身的方法:
<button id="help-button" ng-show="{{HelpButtonVisible}}" class="button button-stable icon-left ion-information-circled"
ui-sref="login" ng-click="HeaderCtrl.HideHelpButton()">Help</button>
这是带有应该显示的方法的按钮:
<button id="login-button" class="col button button-positive button-small" ng-click="HeaderCtrl.ShowHelpButton()" ui-sref="main">Log in</button>
当我点击上面的按钮时,ng-show 更新为 true,但是,帮助按钮没有显示。
为什么?我尝试了所有方法,$scope.$apply
、$scope.$digest
,尝试在没有 {{ }}
的情况下调用对象,但没有任何效果。
编辑:
完全控制者:
angular.module('app.controllers', [])
.controller("HeaderCtrl", function( ) {
var HeaderCtrl = this;
HeaderCtrl.HelpButtonVisible = false;
HeaderCtrl.HideHelpButton = function() {
HeaderCtrl.HelpButtonVisible = false;
}
HeaderCtrl.ShowHelpButton = function() {
HeaderCtrl.HelpButtonVisible = true;
}
})
尝试将其应用于 $scope
var app = angular.module('ido.controllers', []);
app.controller("HeaderCtrl", function($scope) {
angular.extend($scope, {
HelpButtonVisible: false,
HideHelpButton: function() {
$scope.HelpButtonVisible = false;
},
ShowHelpButton: function() {
$scope.HelpButtonVisible = true;
}
});
})
<button id="help-button"
ng-show="HelpButtonVisible"
class="button button-stable icon-left ion-information-circled"
ui-sref="login"
ng-click="HideHelpButton()">Help</button>
始终将事件和值附加到 $scope。您只能访问 $scope.
当您使用范围时,永远不需要使用 .$digest() 或 .$apply()。只有当你突破 $scope.
你所拥有的不是地道的angular。使用 angular 时遵守约定很重要。任何连接到 DOM 的东西都应该附加到 $scope
对象:
angular.module('app.controllers', [])
.controller("HeaderCtrl", function($scope) {
$scope.HelpButtonVisible = false;
$scope.HideHelpButton = function() {
$scope.HelpButtonVisible = false;
}
$scope.ShowHelpButton = function() {
$scope.HelpButtonVisible = true;
}
});
查看:
<button id="help-button"
ng-show="HelpButtonVisible"
class="button button-stable icon-left ion-information-circled"
ui-sref="login"
ng-click="HideHelpButton()">Help</button>
你需要使用 ng-model,你也不能像那样绑定到原语。
控制器:
this.HelperObj = {"ArrofHelperObjs":[/*YOUR OBJECTS HERE*/]};
this.ToggleHelpButton = function(obj){
var package = this.HelperObj.ArrofHelperObjs.length;
var handl = this.HelperObj.ArrofHelperObjs;
if(package == 0){
handl.push(obj);
return 200;
}
for(var x=0;x<package;x++){
if(handl[x] == obj){
handl.splice(x, 1);
return 200;
}
if(x == package-1){
handl.push(obj);
return 200;
}
}
console.log("Error: handl= "+handl);
console.log("Error: obj= "+obj);
return "Error: Conditions were supposed to have been met";
};
然后 html
<div ng-repeat="x in myctrl.HelperObj.ArrofHelperObjs" >
<button ng-model="x.selected" ng-click="myctrl.ToggleHelpButton(x.html); x.selected = !x.selected" ng-show="x.selected">
{{x.html}}
</label>
</div>
有两点需要指出。 ng-model 是您绑定数据的方式。使用 ng-model 时,不要绑定到基元。我花了一段时间才把它记在脑海里。在共享的示例中,我的对象具有选定的属性和 html。 IE。
this. package = {"selected":"false","html":"tagone"};
这在某些情况下可行,但大多数情况下您将拥有多个对象。看起来像这样。
this. package = {"ArrayofObjects":[]};
在这些括号内[] 是您所有的对象。像这样
this. package = {"ArrayofObjects":[{"selected":"false","html":"tagone"},{"selected":"false","html":"tagtwo"}, {"selected":"false","html":"thirdtag"} ]};
像这样设置后,创建一个函数来改变这些值中的任何一个。这就是我的 ToggleHelpButton 方法所做的。我正在更改该元素的选定 属性 的值。然后在你的 html 中使用
<toggledelement ng-model="ctrl.package.ArrayofObjects[x].someproperty">
x 是对象数组的索引。
some属性 是文字选择。
您现在拥有一个绑定到真值或假值的元素。玩得开心!
我正在尝试动态切换 ng-show 值。
我有一个控制器有两种方法,一种显示,一种隐藏:
var HeaderCtrl = this;
HeaderCtrl.HelpButtonVisible = "false";
HeaderCtrl.HideHelpButton = function() {
HeaderCtrl.HelpButtonVisible = "false";
}
HeaderCtrl.ShowHelpButton = function() {
HeaderCtrl.HelpButtonVisible = "true";
}
这是一开始隐藏的按钮。也用于调用会隐藏自身的方法:
<button id="help-button" ng-show="{{HelpButtonVisible}}" class="button button-stable icon-left ion-information-circled"
ui-sref="login" ng-click="HeaderCtrl.HideHelpButton()">Help</button>
这是带有应该显示的方法的按钮:
<button id="login-button" class="col button button-positive button-small" ng-click="HeaderCtrl.ShowHelpButton()" ui-sref="main">Log in</button>
当我点击上面的按钮时,ng-show 更新为 true,但是,帮助按钮没有显示。
为什么?我尝试了所有方法,$scope.$apply
、$scope.$digest
,尝试在没有 {{ }}
的情况下调用对象,但没有任何效果。
编辑:
完全控制者:
angular.module('app.controllers', [])
.controller("HeaderCtrl", function( ) {
var HeaderCtrl = this;
HeaderCtrl.HelpButtonVisible = false;
HeaderCtrl.HideHelpButton = function() {
HeaderCtrl.HelpButtonVisible = false;
}
HeaderCtrl.ShowHelpButton = function() {
HeaderCtrl.HelpButtonVisible = true;
}
})
尝试将其应用于 $scope
var app = angular.module('ido.controllers', []);
app.controller("HeaderCtrl", function($scope) {
angular.extend($scope, {
HelpButtonVisible: false,
HideHelpButton: function() {
$scope.HelpButtonVisible = false;
},
ShowHelpButton: function() {
$scope.HelpButtonVisible = true;
}
});
})
<button id="help-button"
ng-show="HelpButtonVisible"
class="button button-stable icon-left ion-information-circled"
ui-sref="login"
ng-click="HideHelpButton()">Help</button>
始终将事件和值附加到 $scope。您只能访问 $scope.
当您使用范围时,永远不需要使用 .$digest() 或 .$apply()。只有当你突破 $scope.
你所拥有的不是地道的angular。使用 angular 时遵守约定很重要。任何连接到 DOM 的东西都应该附加到 $scope
对象:
angular.module('app.controllers', [])
.controller("HeaderCtrl", function($scope) {
$scope.HelpButtonVisible = false;
$scope.HideHelpButton = function() {
$scope.HelpButtonVisible = false;
}
$scope.ShowHelpButton = function() {
$scope.HelpButtonVisible = true;
}
});
查看:
<button id="help-button"
ng-show="HelpButtonVisible"
class="button button-stable icon-left ion-information-circled"
ui-sref="login"
ng-click="HideHelpButton()">Help</button>
你需要使用 ng-model,你也不能像那样绑定到原语。
控制器:
this.HelperObj = {"ArrofHelperObjs":[/*YOUR OBJECTS HERE*/]};
this.ToggleHelpButton = function(obj){
var package = this.HelperObj.ArrofHelperObjs.length;
var handl = this.HelperObj.ArrofHelperObjs;
if(package == 0){
handl.push(obj);
return 200;
}
for(var x=0;x<package;x++){
if(handl[x] == obj){
handl.splice(x, 1);
return 200;
}
if(x == package-1){
handl.push(obj);
return 200;
}
}
console.log("Error: handl= "+handl);
console.log("Error: obj= "+obj);
return "Error: Conditions were supposed to have been met";
};
然后 html
<div ng-repeat="x in myctrl.HelperObj.ArrofHelperObjs" >
<button ng-model="x.selected" ng-click="myctrl.ToggleHelpButton(x.html); x.selected = !x.selected" ng-show="x.selected">
{{x.html}}
</label>
</div>
有两点需要指出。 ng-model 是您绑定数据的方式。使用 ng-model 时,不要绑定到基元。我花了一段时间才把它记在脑海里。在共享的示例中,我的对象具有选定的属性和 html。 IE。
this. package = {"selected":"false","html":"tagone"};
这在某些情况下可行,但大多数情况下您将拥有多个对象。看起来像这样。
this. package = {"ArrayofObjects":[]};
在这些括号内[] 是您所有的对象。像这样
this. package = {"ArrayofObjects":[{"selected":"false","html":"tagone"},{"selected":"false","html":"tagtwo"}, {"selected":"false","html":"thirdtag"} ]};
像这样设置后,创建一个函数来改变这些值中的任何一个。这就是我的 ToggleHelpButton 方法所做的。我正在更改该元素的选定 属性 的值。然后在你的 html 中使用
<toggledelement ng-model="ctrl.package.ArrayofObjects[x].someproperty">
x 是对象数组的索引。
some属性 是文字选择。
您现在拥有一个绑定到真值或假值的元素。玩得开心!