Флажок angularjs в таблице ng-repeat

Я использую angularjs, чтобы показать таблицу из записей json с флажком, и у меня есть две проблемы:

Первый: Мне нужно, чтобы все чекбоксы были установлены по умолчанию. Протестировано с помощью ng-init, но не работает. Или просто кнопка для переключения всех флажков true-false

Второй При снятии отметки с файла объект показывает кавычки ["", "", ""], но мне нужно показать что-нибудь, если не отмечено

Посмотреть

<div ng-controller = "TestController">
<table class = "table table-striped">
                <tr>
                    <th>Seleccionar</th>
                    <th>Servicio</th>
                    <th>Detalle</th>
                    <th>Precio</th>
                </tr>
                <tr ng-repeat = "(key, value) in listado">
                    <td><input type = "checkbox" ng-model = "ids[$index]" ng-true-value = "{{value}}" ng-false-value = "{{ undefined }}" ng-selected = "checkAll"></td>
                    <td>{{ value.modelo }}</td>
                    <td>{{ value.detalle }}</td>
                    <td>{{ value.precio_in | currency:'$':0 }}</td>
                </tr>               
            </table>
            {{ ids | json }}

контролер

var myApp = angular.module('myApp', [])
.controller('TestController', ['$scope', function ($scope) {

$scope.listado = [];
$scope.ids = [];

    $scope.listado = [ { "id_stock": "4", "oc_id": "4", "detalle": "Revisión de suspención", "cat_id": "16", "codigo": "m20.1", "marca": "", "parte": "", "precio_in": "5000", "id_prov": "1", "cantidad": "1", "id_bodega": "1", "nom_prov": "Proveedor de prueba 1", "modelo": "MECANIZADOS Y OTROS", "nombre": "Bodega Conchalí", "status": "EN BODEGA", "id_cat": "16" }, { "id_stock": "5", "oc_id": "4", "detalle": "Revisión de frenos", "cat_id": "16", "codigo": "m2.2", "marca": "", "parte": "", "precio_in": "4500", "id_prov": "1", "cantidad": "1", "id_bodega": "1", "nom_prov": "Proveedor de prueba 1", "modelo": "MECANIZADOS Y OTROS", "nombre": "Bodega Conchalí", "status": "EN BODEGA", "id_cat": "16" }, { "id_stock": "6", "oc_id": "4", "detalle": "Revisión de ruedas", "cat_id": "16", "codigo": "m20.3", "marca": "", "parte": "", "precio_in": "4500", "id_prov": "1", "cantidad": "1", "id_bodega": "1", "nom_prov": "Proveedor de prueba 1", "modelo": "MECANIZADOS Y OTROS", "nombre": "Bodega Conchalí", "status": "EN BODEGA", "id_cat": "16" }]; }]);   

Проверить код http://jsfiddle.net/eCJ47/44/

Извините, что английский не мой родной язык. Спасибо !!

Вы назначаете ng-model целый объект. Это то, что вы хотите? Разве не было бы чисто, если бы вы назначили ng-true-value = "{{value.id_stock}}"?

Gowthaman 18.04.2018 04:28

Да, мне нужен весь объект, а не только идентификатор

Andres CC 18.04.2018 06:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
3 350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного изменил ваш код, вместо того, чтобы назначать объект новому массиву, добавил новое свойство isSelected к существующему массиву listado и привязал его к флажку и инициализировал его как истинное значение по умолчанию.

            <tr ng-repeat = "(key, value) in listado" ng-init = "value.isSelected = true;">
                <td><input type = "checkbox" ng-model = "value.isSelected"></td>
                <td>{{ value.modelo }}</td>
                <td>{{ value.detalle }}</td>
                <td>{{ value.precio_in | currency:'$':0 }}</td>
            </tr>

Распечатайте listado, чтобы проверить изменения флажка

Плункер http://jsfiddle.net/Vinthi/4atbzo6L/3/

Хорошо, теперь значение флажка меняет значение между истиной или ложью (это служит мне для моей цели), но в моем первом коде я могу добавить или удалить весь объект с помощью ng-модели .... могу ли я справиться с этим?

Andres CC 18.04.2018 07:22

Да, ng-true-value / ng-false-value принимает строковые значения, а не объекты, поэтому необходимо обрабатывать их при щелчке / изменении, например ng-change = "ids [$ index] = (value.isSelected && value) || undefined"

Ininiv 18.04.2018 08:03

Другие вопросы по теме