Как мне получить значения флажков при использовании ng-repeat?

#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?