Ich habe eine App, die in AngularJS geschrieben wurde, und versuche derzeit, die Funktionen zum Ausblenden der Überschriften einiger auf einer der Webseiten angezeigten Widgets hinzuzufügen, wenn der Benutzer ein Kontrollkästchen auswählt, um anzuzeigen, dass sie ausgeblendet werden sollen.AngularJS- wie Elemente mit Hilfe von ng-hide verstecken?
Im Moment habe ich eine Seite, die eine Reihe von Widgets anzeigt - auf der "Überschrift" jedes Widget gibt es eine Schaltfläche "Einstellungen". Wenn der Benutzer auf die Schaltfläche Einstellungen klickt, öffnet sich ein Dialogfeld oben auf der aktuellen Seite (d. H. Der Benutzer navigiert nicht zu einer anderen Seite - die URL ändert sich überhaupt nicht). Dieses Dialogfeld enthält ein Formular mit einer Reihe von Eingabefeldern, von denen eines ein Kontrollkästchen ist, mit dem ich die Überschriften aller Widgets auf der Webseite ausblenden kann.
Ich war nach dem Beispiel an: https://docs.angularjs.org/api/ng/directive/ngHide zu versuchen, dies zu tun, kann aber durchaus nicht scheinen, um es zum Laufen zu bringen ...
Ich habe das ng-hide
Attribut zu meinem HTML-Elemente hinzugefügt wird, wie in dem Beispiel:
<div data-ng-if="widget.name === 'tag-box'" ng-hide="hideWidgetHeading"> <!-- class="ng-hide"-->
<div class="divider"></div>
...
<div class="divider"></div>
<div class="row ui-checkbox-row">
<label class="col-sm-4 col-xs-6" data-i18n="Hide widget heading:"></label>
<div class="col-sm-8 col-xs-6">
<label class="ui-checkbox">
<input type="checkbox" name="noWidgetHeading" id="noWidgetHeading" ng-true-value= "'YES'" ng-false-value= "'NO'" ng-change="hideWidgetHeading()" ng-click="hideWidgetHeading()" ng-checked="hideWidgetHeading" ng-model="viewModel.hideWidgetHeading">
<!-- ng-model="viewModel.hideWidgetHeading" -->
<span></span>
</label>
</div>
</div>
</div>
I definiert, um die Funktion in der hideWidgetHeading()
ctrl.js
Datei wie folgt:
function hideWidgetHeading(){
if($scope.widgetHeadingCheckbox==false) {
$scope.$watch('noWidgetHeading', function() {
$scope.hideWidgetHeading = true;
console.log("Value of hideWidgetHeading: ", $scope.hideWidgetHeading);
});
return true;
} else {
console.log("hideWidgetHeading() else called (Widget/ctrl.js line 440) ");
$scope.$watch('noWidgetHeading', function() {
$scope.hideWidgetHeading = false; //document.getElementById('noWidgetHeading');
});
return false;
}
if($scope.hideWidgetHeading) {
console.log("hideWidgetHeading is true- hide the widget heading: ");
}
return $scope.hideWidgetHeading;
}
und ich habe folgende CSS zu meiner widgets.scss Datei hinzugefügt:
.animate-show-hide.ng-hide {
opacity: 0;
}
.animate-show-hide.ng-hide-add,
.animate-show-hide.ng-hide-remove {
transition: all linear 0.5s;
}
.umw-tag-box {
opacity: 1;
}
Wenn ich meine Seite laden, wie es gegenwärtig ist, wenn ich auf die Schaltfläche Einstellungen klicken, wird der Dialog eröffnet. Wenn ich dann überprüfen Sie die ‚ausblenden Widget Überschrift‘ Kontrollkästchen, und klicken Sie auf Senden, die Debug, die ich hinzugefügt haben, zeigt das folgende in der Konsole:
Value of hideWidgetHeading: true
, die mir sagt, dass der Code innerhalb der $scope.$watch(...){...}
Funktion ausgeführt wird.
Wenn ich jedoch auf die Schaltfläche "Einstellungen" klicke und dann entweder das Kontrollkästchen "Widget-Überschrift ausblenden" nicht ankreuze oder es abchecke und dann auf Absenden klicke, bekomme ich den gleichen true
Wert angezeigt console debug, das anzeigt, dass der Code innerhalb der $scope.$watch(...){...}
-Funktion ausgeführt wird, unabhängig davon, ob sich das überwachte Element ändert oder nicht.
Fragen
Wie kann ich, dass der Code nur innerhalb der
$scope.$watch(...){...}
läuft, wenn das ‚angeschaut‘ Element (das heißt die Checkbox) hat seinen Wert geändert gewährleisten?Wie kann ich tatsächlich das CSS aufrufen, das ich hinzugefügt habe, um die HTML-Elemente des bestimmten HTML auszublenden, das ich ausblenden möchte? Oder wie kann ich das CSS auf die HTML-Elemente anwenden, die ich ausblenden möchte?
bearbeiten
änderte ich den HTML-Code für das Kontrollkästchen:
<input type="checkbox" ng-model="checked" name="noWidgetHeading" id="noWidgetHeading">
wie vorgeschlagen, und wenn ich jetzt auf meiner Seite sehen, und das Dialogfeld öffnen, zeigt es die Widget, wie ich erwarten:
Wenn ich auf das Widget die Schaltfläche ‚Einstellungen‘ klicken, wird das ‚Configure Item‘ Dialog öffnet sich oben auf der Seite nach oben:
Aber wenn ich wählen Sie das ‚Verstecken Widget Überschrift‘ Checkbox, es tatsächlich verbirgt sich die ‚Tag‘ label & Eingabefeld aus dem Dialog:
das Element, das ich eigentlich verbergen möchte, ist auf der Seite angezeigt, aus dem das Dialogfeld geöffnet wird, sich nicht auf dem Dialogfeld .. Aber ich kann nicht herausfinden, wie ich mich verstecken kann Das mit einem Steuerelement im Dialogfeld ... Irgendwelche Vorschläge?
haben Sie versucht mit 'ng-hide =" hideWidgetHeading() "' (runde Klammern). Mir ist auch aufgefallen, dass Sie im Bereich denselben Namen für Variable haben, vielleicht führt das zu unerwartetem Verhalten, Sie müssen wählen, ob Sie eine Bereichsvariable zum Ausblenden verwenden (ohne Klammern, aber Sie müssen die Funktion aufrufen) oder mit Ihrer Funktion (In diesem Fall sollte die Funktion im Steuerungsumfang sein) – Kaddath
Wo? Auf dem ' (angular-touch.js: 440) bei HTMLButtonElement.dispatch (jquery.js: 4435) bei HTMLButtonElement.r.handle (jquery.js: 4121) ' – someone2088
Der gleiche Name für welche Variable im Bereich? – someone2088