#javascript #angularjs #checkbox #angularjs-ng-repeat
#javascript #angularjs #флажок #angularjs-ng-repeat
Вопрос:
Код в файле view.html:
<label ng-repeat = "agents in acesslevel |filter:{acesslevel: 'Agent'}">
<div class="col-xs-2">
<input type= "checkbox"
ng-model="agentsSelected"
checklist-value="agents.name"
ng-true-value=agents ng-false-value="'NO'">
{{agents.name}}
</div>
</label>
Где acesslevel — это данные формата JSON, которые я получаю из своей базы данных.
Например,
{
"acesslevel": "Quality",
"dob": "1995-02-03",
"name": "anjali",
"password": "tanya",
"username": "anju",
"createdAt": "2014-07-02T16:26:26.816Z",
"updatedAt": "2014-07-02T16:26:26.816Z",
"id": "53b432b230aaa394278522ca"
},
{
"acesslevel": "Agent",
"dob": "1995-02-03",
"name": "christopher",
"password": "tanya",
"username": "anju",
"createdAt": "2014-07-02T16:26:48.170Z",
"updatedAt": "2014-07-02T16:26:48.170Z",
"id": "53b432c830aaa394278522cb"
}
Этот конкретный код в HTML отображает имена агентов на уровне доступа (в приведенном выше случае это отображало бы christopher)
Как бы я получил значение выбранного флажка в контроллере?
Я хочу вставить данные этого выбранного агента в новую таблицу на моем сервере базы данных.
Комментарии:
1. На что вы хотите, чтобы флажок повлиял? ng-model — это то, к чему привязывается флажок, но вы привязываете его к одному и тому же для всех агентов? Если вы используете
ng-model="agents.isChecked"
, вы можете получить значение IsChecked для каждого уровня доступа в вашем контроллере.2. @Patrick я хочу, чтобы все агенты, на которых нажимают в моем контроллере, чтобы оттуда я мог отправлять их на свой сервер mongodb.
3. И почему вы привязываете флажок к agentsSelected вместо свойства в экземпляре agents? Разве это не решает вашу проблему?
4. Nope agentsSelected выдает мне undefined в моем контроллере.
5. Что? Я говорю вам использовать свойство экземпляра agents, а не agentsSelected (которое привязано к вашему конкретному $scope). Вы не можете использовать
ng-model="agents.isChecked
и прочитать это свойство в вашем контроллере? Вы не указали, на какое логическое значение вы пытаетесь повлиять.
Ответ №1:
Проблема в том, что вы используете ng-model, которая привязывается к (как я полагаю) массиву, но Angular ожидает логическое значение (true или false).
Если вы вместо этого привязываетесь к свойству экземпляров вашего отфильтрованного массива accesslevel, вы можете извлечь эти данные позже в вашем контроллере
<label ng-repeat = "agents in acesslevel |filter:{acesslevel: 'Agent'}">
<div class="col-xs-2">
<input type= "checkbox"
ng-model="agents.isSelected" <!-- bind to another value -->
checklist-value="agents.name"
ng-true-value="agents"
ng-false-value="'NO'">
{{agents.name}}
</div>
</label>
Ваш контроллер может получить доступ к этому свойству позже, если у вас, например, есть метод отправки значений в ваш серверный сервер.
$scope.submit = function() {
var selectedAgents = [];
angular.forEach($scope.acesslevel, function (agent) {
if (agent.acesslevel == 'Agent' amp;amp; agent.isSelected) {
selectedAgents.push(agent);
}
});
// Here you can make calls to your backend with the selectedAgents variable.
};
Комментарии:
1. Работает, большое вам спасибо. Был раздражен из-за этого очень нового для angular-js, запущенного всего неделю назад, так что многого не знаю. Кстати, какая-нибудь книга или статья рекомендована для angular? И есть какие-нибудь идеи по использованию select2 в angular через ng-repeat?