Я новичок в angularjs и все еще изучаю все концепции, когда я иду. Я работаю над личным проектом, который будет использовать angularjs для получения данных json и отображения его на HTML-странице переднего конца.
После того, как страница отображается в HTML, есть два столбца, называемые правилами и именем сервера, которые имеют поле ввода флажка. То, что я пытаюсь сделать, - это щелкнуть галочкой, он создаст истинную или ложную переменную, основанную на этом атрибуте check = !check
. Я хотел бы получить доступ к тем объектам, которые создаются внутри области ngRepeat. Я не уверен, как я могу добиться этого с помощью AngularJS. Я знаю, что могу с JQuery, но я пытаюсь понять это с помощью AJS.
Любая помощь, которая поможет мне в правильном направлении, поможет много. :)
Ниже мой код, и вот моя ссылка JSFiddle.
Угловой код JS:
angular.module('ucmgmt', [])
.controller('appsCtrl', function ($scope) {
$scope.data = {
"applications": [{
"appname": "maps",
"sitename": "maps.example.com",
"rules": [
"External_Under_Construction",
"Internal_Under_Construction"]
}, {
"appname": "bing",
"sitename": "bing.example.com",
"rules": [
"Bing_Under_Construction"]
}]
};
$scope.process = function ($index) {
console.log("item is checked." + $index);
};
})
Код HTML
<div ng-app="ucmgmt">
<div ng-controller="appsCtrl">
<table class="tg">
<tr>
<th class="tg-031e">Appname</th>
<th class="tg-yw4l">Sitename</th>
<th class="tg-yw4l">Rule</th>
<th class="tg-yw4l">ServerName</th>
<th class="tg-yw4l">Status</th>
</tr>
<tbody ng-repeat="item in data">
<tr ng-repeat="app in item">
<td class="tg-yw4l">{{app.appname}}</td>
<td class="tg-yw4l">{{app.sitename}}</td>
<td class="tg-yw4l">
<ul>
<li ng-repeat="rule in app.rules">
<input ng-click="check = !check" type="checkbox" value="{{rule}}">{{rule}}</li>
</ul>
</td>
<td class="tg-yw4l">
<ul>
<li>
<input ng-click="check = !check; process($index)" type="checkbox" value="SERVER1">SERVER1</li>
<li>
<input ng-click="check = !check" type="checkbox" value="SERVER2">SERVER2</li>
</ul>
</td>
<td class="tg-yw4l">
<ul>
<li>NA</li>
<li>NA</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
</div>
В угловом режиме, когда вы используете флажки, вы обрабатываете проверенное состояние с помощью ng-модели.
Установите "check" как свойство правила и используйте ng-model на вашем входе:
<li ng-repeat="rule in app.rules">
<input ng-model="rule.check" type="checkbox"></li>
затем в своем ng-клике вы можете передать фактическое значение приложения и/или правила:
<input ng-model="app.server1.check" ng-click="process(app)" type="checkbox" value="SERVER1">SERVER1</li>
то в вашем контроллере у вас будет доступ к этому свойству следующим образом:
$scope.process = function (app) {
// access your rules by an index of your repeater
var ruleChecked = app.rules[index].check; // the check of "index" rule of above repeater
var serverChecked = app.server1.check; // the value of the "server 1 checkbox"
}
Также вам нужно будет инициализировать переменную server1 внутри каждого из объектов вашего приложения, чтобы сделать эту работу должным образом.
TypeError: Cannot assign to read only property 'check' of External_Under_Construction
. ссылка JSFiddle обновлен с помощью ng-модели.
"rules": [ {name:"External_Under_Construction", check: false}, {name: "Internal_Under_Construction", check: false}];
чтобы инициализировать их как не проверенные. И тогда ваш шаблон {{rule.name}}