#angularjs #angular-material
#angularjs #angular-материал
Вопрос:
Я пытаюсь вставить флажок внутри группы переключателей, используя угловой материал. У меня отображаются флажки; однако я не могу щелкнуть по флажкам. Посмотрите на это кодовое перо
Разметка
<md-radio-group ng-model="vm.TargetType">
<md-radio-button class="" ng-repeat="targetGroup in vm.Targets" ng-value="targetGroup.Id">{{targetGroup.Name}}<br />
<div ng-if="targetGroup.Id == 1">
<div ng-repeat="p in vm.Phases">
<md-checkbox ng-checked="vm.exists(p,vm.SelectedPhases)" ng-click="vm.toggle(p,vm.SelectedPhases)">{{p.Name}}</md-checkbox>
</div>
</div>
</md-radio-button>
</md-radio-group>
JS
(function() {
'use strict';
angular.module("myApp", ['ngMaterial']).controller("myController",
function ($scope) {
var vm=this;
vm.SelectedPhases=[];
console.log('in my controller')
vm.Targets = [{
Id: 1,
Name: 'Can't select child elements'
}, {
Id: 2,
Name: 'Another Group'
}];
vm.Phases = [{
Id: 1,
Name: 'Something A'
}, {
Id: 2,
Name: 'Something B'
}];
vm.toggle = function (item, list) {
var idx = list.indexOf(item);
if(idx > -1)
{
list.splice(idx, 1);
}
else
{
list.push(item);
}
};
vm.exists = function (item, list) {
return list.indexOf(item) > -1;
};
});
})();
Редактировать
Похоже, что содержимое внутри переключателя содержится в элементе с классом md-label. Я предполагаю, что это предотвращает распространение события click?
Ответ №1:
Помогает ли это? — CodePen
Я не уверен, чего вы пытаетесь достичь. 🙂
Разметка
<div layout="row" layout-align="start center" ng-repeat="targetGroup in vm.Targets">
<md-radio-group ng-model="vm.TargetType">
<md-radio-button class="" ng-value="targetGroup.Id">{{targetGroup.Name}}<br />
</md-radio-button>
</md-radio-group>
<div ng-if="targetGroup.Id === 1">
<div ng-repeat="p in vm.Phases">
<md-checkbox ng-checked="vm.exists(p,vm.SelectedPhases)" ng-click="vm.toggle(p,vm.SelectedPhases)">{{p.Name}}</md-checkbox>
</div>
</div>
</div>
Комментарии:
1. Не совсем, я хочу, чтобы флажки были под переключателем. Таким образом, у пользователя есть два разных параметра (TargetGroup), если они выбирают targetgroup 1, то у них есть дополнительные параметры, которые они могут выбрать.
2. Только что обновил мой codepen, показывающий, как я буду отключать флажки, если первое радио не выбрано.
Ответ №2:
Поскольку вы не можете вложить их, вам нужно расположить элементы по-другому. Смотрите это кодовое перо для решения.
<div class='row'>
<md-radio-group ng-model="vm.TargetType">
<div ng-repeat="targetGroup in vm.Targets">
<md-radio-button class="" ng-value="targetGroup.Id">
{{targetGroup.Name}}<br />
</md-radio-button>
<div class="row" style="margin-left:50px;" ng-repeat="phase in vm.Phases" ng-if="targetGroup.Id == 1">
<md-checkbox ng-disabled="vm.TargetType!=1" checked="vm.exists(p,vm.SelectedPhases)" ng-click="vm.toggle(p,vm.SelectedPhases)">{{phase.Name}}</md-checkbox>
</div>
</md-radio-group>
</div>