массив ng-repeat флажок с отправкой формы

0

Изображение 174551
Я хочу получить значение checkbox при отправке event.i использую mongodb database.console, я получаю значение, как этот Tires, Spares, Accessories.i сделал страницу просмотра на основе output.if, когда я нажимаю флажок, я получил ошибку в консоли TypeError: Невозможно назначить только свойство "выбрано" для чтения только для "tyres". Как я могу это решить, пожалуйста, помогите мне

'use strict';

/**
 * @ngdoc object
 * @name test1.Controllers.Test1Controller
 * @description Test1Controller
 * @requires ng.$scope
 */
angular
    .module('test1')
    .controller('Test1Controller', [
        '$scope', '$http', '$location', '$window',
        function($scope, $http, $location, $window) {

            $http.get('***').success(function(data, status, response) {
                $scope.items = (JSON.stringify(data[0].D_Services).replace(/\"/g, "")).split(',');
                console.log($scope.items);
            });

            $scope.check = function(items) {
                console.log(items);
            };
        }
    ]);
<div ng-controller="Test1Controller" data-ng-init="loadservice()">
    <div ng-repeat="item in items">
        <input type="checkbox" ng-model="item.selected" ng-true-value="'Y'" ng-false-value="'N'" /> {{item}}
    </div>
    <input type="button" name="submit" value="submit" ng-click="check(items)" />
</div>
how can i grab all selected check box values on submit action only

2 ответа

1
Лучший ответ

Результат этого кода: items.split(',') - это массив, который не существует в области видимости, поэтому он не может быть записываемой моделью для директивы ng-repeat. Вы должны создать массив в своей области следующим образом:

$scope.items = (JSON.stringify(data[0].D_Services).replace(/\"/g, "")).split(',');

и использовать эту модель в разметке

<div ng-repeat="item in items">
    ...
</div>

Если вам нужен результат в виде строки, вы должны присоединиться к ней перед возвратом:

$scope.check = function(items) {
   console.log(items.join(','));
};
  • 0
    спасибо, я изменил свой код. <div ng-repeat = "item in items"> <input type = "checkbox" ng-model = "item.selected" ng-true-value = "'Y'" ng-false- value = "'N'" /> {{item}} </ div> <input type = "button" name = "submit" value = "submit" ng-click = "check ()" />. как я могу принимать только выбранные значения при отправке события
  • 0
    Используйте метод 'map' для преобразования массива 'items' в такой формат: [{value: 'Tires', selected: false}, ...]. и свяжите текст флажка с 'item.value' следующим образом: {{item.value}}. Чем вы можете отфильтровать ваши значения методом «фильтра» перед отправкой.
Показать ещё 2 комментария
0

поскольку элементы представляют собой строку типа

var items = "john,grace,peter";

и когда вы выполняете items.split(','), это приведет к тому, что массив строк

["john","grace","peter"]

и когда ng-model пытается установить проверенный статус для каждого элемента, который является ошибкой, потому что вы не можете выполнять такие операции, как

items[1].selected

поскольку элементы [1] - это массив.

  • 0
    Как я могу принять выбранные значения при отправке события

Ещё вопросы

Сообщество Overcoder
Наверх
Меню