AngularJS - Использование ng-repeat для создания наборов радиовходов
Я оцениваю angularjs для будущего проекта. Одна из вещей, которую мне нужно будет сделать, это отобразить разные страницы информации о канале, выбрав соответствующий входной сигнал "страница". Кроме того, диапазоны кнопок страниц также могут быть выбраны из группы радиовходов "set page page".
В приведенном ниже примере работы есть набор из 32 каналов, в которых видимая группа каналов выбирается с помощью комбинации радиостанций "set" и "page", что дает в общей сложности 2 * 4 страницы по 4 канала.
<!doctype html>
<html ng-app>
<head>
<script type="text/javascript" src="angular.js"></script>
<script type="text/javascript">
function Channels($scope) {
$scope.groupSize = 4;
$scope.pageSet = 0;
$scope.pageNumber = 0;
$scope.channels = [
{"id": "Ch-001"}, {"id": "Ch-002"}, {"id": "Ch-003"}, {"id": "Ch-004"},
{"id": "Ch-005"}, {"id": "Ch-006"}, {"id": "Ch-007"}, {"id": "Ch-008"},
{"id": "Ch-009"}, {"id": "Ch-010"}, {"id": "Ch-011"}, {"id": "Ch-012"},
{"id": "Ch-013"}, {"id": "Ch-014"}, {"id": "Ch-015"}, {"id": "Ch-016"},
{"id": "Ch-017"}, {"id": "Ch-018"}, {"id": "Ch-019"}, {"id": "Ch-020"},
{"id": "Ch-021"}, {"id": "Ch-022"}, {"id": "Ch-023"}, {"id": "Ch-024"},
{"id": "Ch-025"}, {"id": "Ch-026"}, {"id": "Ch-027"}, {"id": "Ch-028"},
{"id": "Ch-029"}, {"id": "Ch-030"}, {"id": "Ch-031"}, {"id": "Ch-032"}
];
}
</script>
</head>
<body ng-controller="Channels">
<p>Set:
<input type="radio" name="pageSet" ng-model="pageSet" ng-value="0">1-4</input>
<input type="radio" name="pageSet" ng-model="pageSet" ng-value="1">5-8</input>
</p>
<p>Page:
<input type="radio" name="pageNumber" ng-model="pageNumber" ng-value="0">{{pageSet * groupSize + 1}}</input>
<input type="radio" name="pageNumber" ng-model="pageNumber" ng-value="1">{{pageSet * groupSize + 2}}</input>
<input type="radio" name="pageNumber" ng-model="pageNumber" ng-value="2">{{pageSet * groupSize + 3}}</input>
<input type="radio" name="pageNumber" ng-model="pageNumber" ng-value="3">{{pageSet * groupSize + 4}}</input>
</p>
<ul>
<li ng-repeat="channel in channels | limitTo: groupSize * ((groupSize * pageSet) + pageNumber + 1) | limitTo: -groupSize">
<p>{{channel.id}}</p>
</li>
</ul>
</body>
</html>
Мой вопрос заключается в том, как создавать радиовходы с настройками страницы/страницы с помощью ng-repeat
. Я пробовал такие подходы, как:
<p>Set: <input ng-repeat="n in [0,1]" type="radio" name="pageSet" ng-model="pageSet" ng-value="{{n}}"></p>
<p>Page: <input ng-repeat="n in [0,1,2,3]" type="radio" name="pageNumber" ng-model="pageNumber" ng-value="{{n}}"></p>
который выглядит правильно, но значения не привязываются к соответствующим переменным pageSet/pageNumber. Может ли кто-нибудь сказать, чего я здесь не хватает?
Ответы
Ответ 1
ng-repeat создать дочернюю область, поэтому вам нужно привязать к $parent:
Здесь сценарий: http://jsfiddle.net/g/r9MLe/2/
Пример:
<p>Set:
<label ng-repeat="n in [0,1]">
<input type="radio" name="pageSet" ng-model="$parent.pageSet" ng-value="n" />{{n}}
</label>
</p>
<p>Page:
<label ng-repeat="n in [0,1,2,3]">
<input type="radio" name="pageNumber" ng-model="$parent.pageNumber" ng-value="n" /> {{n}}
</label>
</p>
Ответ 2
Что не так с использованием значения из JSON?
<table>
<tr ng-repeat="v in partneradd.verifications">
<td>{{v.label}}</td>
<td>
<div class="radio-inline">
<label>
<input type="radio" name="{{v.value}}" value="required"> Required
</label>
</div>
</td>
<td>
<div class="radio-inline">
<label>
<input type="radio" name="{{v.value}}" value="optional"> Optional
</label>
</div>
</td>
</tr>
</table>
из данных:
vm.verifications = [
{
"label" : "Valid last line (USPS only)",
"value" : "vll",
"type" : "optional"
},
{
"label" : "Domestic recipient",
"value" : "dr",
"type" : "optional"
},
];
Ответ 3
Это простой пример. Надеюсь, все ясно.
Параметр name
является обязательным в переключателе (для проверки возможности проверки одной кнопки из группы).
Html:
<form name="myForm" ng-controller="MyCtrl">
<p>Favorite Beatle</p>
<ul>
<li ng-repeat="person in people">
<label>
<input type="radio" ng-model="$parent.name" name="name" value="{{person.name}}" required />{{person.name}}
</label>
</li>
</ul>
<p><tt>myForm.$invalid: {{myForm.$invalid}}</tt></p>
<button ng-disabled="myForm.$invalid">Submit</button>
</form>
JavaScript:
function MyCtrl($scope) {
$scope.people = [{
name: "John"
}, {
name: "Paul"
}, {
name: "George"
}, {
name: "Ringo"
}];
}