У меня есть форму для ответа на сообщения, которые я хочу показать только тогда, когда isReplyFormOpen
является истинным, и каждый раз, когда я нажимаю кнопку ответа, я хочу переключать отображение формы или нет. Как я могу это сделать?
Как переключить ng-show в AngularJS на основе логического?
Ответ 1
Вам просто нужно переключить значение "isReplyFormOpen" на событие ng-click
<a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>
<div ng-show="isReplyFormOpen" id="replyForm">
</div>
Ответ 2
В принципе, я решил это, НЕ добавляя значение isReplyFormOpen
всякий раз, когда он нажимается:
<a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>
<div ng-init="isReplyFormOpen = false" ng-show="isReplyFormOpen" id="replyForm">
<!-- Form -->
</div>
Ответ 3
Если на основе щелчка здесь:
ng-click="orderReverse = orderReverse ? false : true"
Ответ 4
Стоит отметить, что если у вас есть кнопка в контроллере A и элемент, который вы хотите показать в контроллере B, вам может понадобиться использовать точечную нотацию для доступа к переменной области видимости между контроллерами.
Например, это не сработает:
<div ng-controller="ControllerA">
<a ng-click="isReplyFormOpen = !isReplyFormOpen">Reply</a>
<div ng-controller="ControllerB">
<div ng-show="isReplyFormOpen" id="replyForm">
</div>
</div>
</div>
Чтобы решить эту проблему, создайте глобальную переменную (т.е. в контроллере A или ваш главный контроллер):
.controller('ControllerA', function ($scope) {
$scope.global = {};
}
Затем добавьте "глобальный" префикс к вашему клику и покажите переменные:
<div ng-controller="ControllerA">
<a ng-click="global.isReplyFormOpen = !global.isReplyFormOpen">Reply</a>
<div ng-controller="ControllerB">
<div ng-show="global.isReplyFormOpen" id="replyForm">
</div>
</div>
</div>
Подробнее см. Вложенные состояния и вложенные представления в документации Angular -UI, просмотрите видео или прочитайте области понимания.
Ответ 5
Если у вас несколько меню с подменю, вы можете перейти к решению ниже.
HTML
<ul class="sidebar-menu" id="nav-accordion">
<li class="sub-menu">
<a href="" ng-click="hasSubMenu('dashboard')">
<i class="fa fa-book"></i>
<span>Dashboard</span>
<i class="fa fa-angle-right pull-right"></i>
</a>
<ul class="sub" ng-show="showDash">
<li><a ng-class="{ active: isActive('/dashboard/loan')}" href="#/dashboard/loan">Loan</a></li>
<li><a ng-class="{ active: isActive('/dashboard/recovery')}" href="#/dashboard/recovery">Recovery</a></li>
</ul>
</li>
<li class="sub-menu">
<a href="" ng-click="hasSubMenu('customerCare')">
<i class="fa fa-book"></i>
<span>Customer Care</span>
<i class="fa fa-angle-right pull-right"></i>
</a>
<ul class="sub" ng-show="showCC">
<li><a ng-class="{ active: isActive('/customerCare/eligibility')}" href="#/CC/eligibility">Eligibility</a></li>
<li><a ng-class="{ active: isActive('/customerCare/transaction')}" href="#/CC/transaction">Transaction</a></li>
</ul>
</li>
</ul>
Есть две функции, которые я назвал first: ng-click = hasSubMenu ('dashboard'). Эта функция будет использоваться для переключения меню, и это объясняется в приведенном ниже коде. Ng- class= "{active: isActive ('/customerCare/transaction')} он добавит класс, активный в текущий пункт меню.
Теперь я определил некоторые функции в своем приложении:
Сначала добавьте зависимость $rootScope, которая используется для объявления переменных и функций. Чтобы узнать больше о $roootScope, перейдите по ссылке: https://docs.angularjs.org/api/ng/service/ $rootScope
Вот мой файл приложения:
$rootScope.isActive = function (viewLocation) {
return viewLocation === $location.path();
};
Вышеупомянутая функция используется для добавления активного класса в текущий пункт меню.
$rootScope.showDash = false;
$rootScope.showCC = false;
var location = $location.url().split('/');
if(location[1] == 'customerCare'){
$rootScope.showCC = true;
}
else if(location[1]=='dashboard'){
$rootScope.showDash = true;
}
$rootScope.hasSubMenu = function(menuType){
if(menuType=='dashboard'){
$rootScope.showCC = false;
$rootScope.showDash = $rootScope.showDash === false ? true: false;
}
else if(menuType=='customerCare'){
$rootScope.showDash = false;
$rootScope.showCC = $rootScope.showCC === false ? true: false;
}
}
По умолчанию $rootScope.showDash и $rootScope.showCC установлены в значение false. Он отключит меню при загрузке страницы. Если у вас есть более двух подменю, добавьте соответственно.
Функция hasSubMenu() будет работать для переключения между меню. Я добавил небольшое условие, если (location [1] == 'customerCare') { $ rootScope.showCC = true; } else if (location [1] == 'dashboard') { $ rootScope.showDash = true; } он останется подменю открытым после перезагрузки страницы в соответствии с выбранным пунктом меню.
Я определил свои страницы следующим образом:
$routeProvider
.when('/dasboard/loan', {
controller: 'LoanController',
templateUrl: './views/loan/view.html',
controllerAs: 'vm'
})
Вы можете использовать isActive() только в том случае, если у вас есть одно меню без подменю. Вы можете изменить код в соответствии с вашими требованиями. Надеюсь, это поможет. Отличный день:)
Ответ 6
Вот пример использования директив ngclick и ng-if.
Примечание: это ng-if удаляет элемент из DOM, но ng-hide просто скрывает отображение элемента.
<!-- <input type="checkbox" ng-model="hideShow" ng-init="hideShow = false"></input> -->
<input type = "button" value = "Add Book"ng-click="hideShow=(hideShow ? false : true)"> </input>
<div ng-app = "mainApp" ng-controller = "bookController" ng-if="hideShow">
Enter book name: <input type = "text" ng-model = "book.name"><br>
Enter book category: <input type = "text" ng-model = "book.category"><br>
Enter book price: <input type = "text" ng-model = "book.price"><br>
Enter book author: <input type = "text" ng-model = "book.author"><br>
You are entering book: {{book.bookDetails()}}
</div>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.controller('bookController', function($scope) {
$scope.book = {
name: "",
category: "",
price:"",
author: "",
bookDetails: function() {
var bookObject;
bookObject = $scope.book;
return "Book name: " + bookObject.name + '\n' + "Book category: " + bookObject.category + " \n" + "Book price: " + bookObject.price + " \n" + "Book Author: " + bookObject.author;
}
};
});
</script>