#javascript #html #angularjs
#javascript #HTML #angularjs
Вопрос:
Я пытаюсь создать выпадающий список в AngularJS, который заполняется Json. Мне нужны группы и подгруппы. Однако я сталкиваюсь с проблемой, когда мне нужно открыть группу внутри моего ng-repeat. Я использую кнопки, чтобы можно было выбирать все элементы, включая заголовки, и отображать divs на основе условий.
HTML и угловой код:
(function() {
'use strict';
angular.module('cdeApp')
.component('advCrimeSelect', {
controller: AdvCrimeSelectController,
templateUrl: 'src/components/advCrimeSelect/index.html',
bindings: { onChanges: '<', crimes: '<', selectedCrime: '<', groups: '<'}
});
AdvCrimeSelectController.$inject = ['$log'];
function AdvCrimeSelectController($log) {
var vm = this;
vm.$onInit = construct;
function construct() {
vm.crimeChanged = crimeChanged;
vm.openDdl = openDdl;
vm.openGroups = openGroups;
vm.ddlOpen = false;
vm.openPerson = false;
vm.openProperty = false;
vm.openSociety = false;
vm.groupName = " ";
}
function crimeChanged() {
if (vm.onChanges)
vm.onChanges({ crime: vm.selectedCrime });
}
function openDdl(){
if(vm.ddlOpen == false)
vm.ddlOpen = true;
else {
vm.ddlOpen = false;
}
}
function openGroups(group){
vm.groupName = group;
console.log(vm.groupName);
}
}
})();
<div>
<button ng-click="$ctrl.openDdl()" class="sans-serif col-12 field field-sm select border-blue">
{{$ctrl.selectedCrime.crime}}</button>
<div ng-show="$ctrl.ddlOpen" ng-repeat="g in $ctrl.groups">
<button ng-click="$ctrl.openGroups(g.id)" class="sans-serif col-12 field select field-sm border-blue">
{{g.text}}</button>
<div ng-show="{{g.id}} == $ctrl.groupName">stuff</div>
</div>
</div>
Сравнение в ng-show внутри цикла под кнопкой возвращает то же значение при нажатии, а также с помощью g.id . Итак, я не уверен, почему мой ng-show вообще не показывает div с «stuff». Условие должно быть истинным всякий раз, когда нажимается группа.
Комментарии:
1. Вы определяете функции, но не прикрепляете их к экземпляру контроллера. Попробуйте
vm.crimeChanged = function...
2. @netoctone функции работают. crimeChanged еще не используется. В этом случае мне больше интересно, почему в моем html не отображается ng-show при сравнении двух одинаковых значений. Когда я нажимаю на один, таким образом, устанавливая groupName в значение, он не показывает div, который g.id имеет соответствующее значение для.
3. Другая возможная причина заключается в том, что
{{g.id}} == $ctrl.groupName
выражение не выполняется для нецифровых значений идентификатора. Попробуйтеg.id == $ctrl.groupName
вместо этого.4. @netoctone, который это исправил. Как ни странно, это отображается в консоли как g.id вот почему я изначально поставил {{}} но спасибо вам за вашу помощь!