AngularJS - Установите флажок целое число?

Мне удалось увидеть true или false и вернуть строки в checkboxes с ng-true-value и ng-false-value, но в дополнение, я хочу, чтобы флажок был целым, и если он установлен, он возвращает целое число,

Что должно быть похоже на то, когда я получаю значение из selectbox: http://jsfiddle.net/PuDRm/

Но я не могу получить такую ​​же идею в флажке: http://jsfiddle.net/PuDRm/1/

<input type="checkbox" ng-model="testc" ng-true-value="Yes" ng-false-value="No" ng-change="processtest()" /> Yes

Я полный новичок и пытаюсь понять AngularJS.

Ответы

Ответ 1

Похоже, вы пытаетесь привязать к двум отдельным значениям флажок.

При выборе вида - это имя, которое вы указали, например. 'test1', а модель - это число, например. '1'. Для флажка вид представляет собой чек или пустой квадрат, а модель - Да/Нет (или все, что вы хотите поместить в ng-true-value и ng-false-value). Там нет места, чтобы он тоже выдавал номер.

Было бы проще позволить модели checkbox быть стандартным (логическим) типом, опуская атрибуты ng-true-value и ng-false-value. Затем вы можете отобразить число и текст на основе этого, как в этом обновленном скрипте: http://jsfiddle.net/D5DGf/1/

Связи {{ ... }} заботятся об обновлении при изменении значений функции, поэтому вам не нужно использовать ng-change.


Что случилось с оригинальным скриптом checkbox?

В функции processtest вы берете модель (Да/Нет) и меняете ее всегда на 8 или 1. Флажок (фактически, ngModel) не понимает этого, поскольку он ожидает, что всегда будет видеть Да/Нет. Поскольку он не знает, что делать, он возвращается к тому, чтобы быть непроверенным.

Вот почему флажок в оригинальной скрипке невозможен.

Ответ 2

Если вы все еще хотите установить число для вашей модели и значение checbox, вы можете сделать это с помощью настраиваемой директивы для синтаксического анализа строки на целое число.

Демо: http://jsfiddle.net/qw5zS/

HTML

<input type="checkbox" ng-model="test" parse-int ng-true-value="1" ng-false-value="0" /> 

JS

app.directive('parseInt', [function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, elem, attrs, controller) {
            controller.$formatters.push(function (modelValue) {
                console.log('model', modelValue, typeof modelValue);
                return '' + modelValue;
            });

            controller.$parsers.push(function (viewValue) {
                console.log('view', viewValue, typeof viewValue);
                return parseInt(viewValue,10);
            });
        }
    }
} ])

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

Ответ 3

Если вы измените столбец в базе данных от целого до char, он будет работать с   

<input type="checkbox" ng-model="testc" ng-true-value="1" ng-false-value="0" ng-change="processtest()" /> Yes

Ответ 4

Другой подход без потребностей ng-model, ng-true-value и ng-false-value. Пусть они будут такими, какие они есть.

JS

angular.module('whateverModule')
    .directive('toggleInt', function () {
        function link ($scope, $element, attr) {
            $element.on('click', function () {
                $scope.$apply(function() {
                    $scope.toggleModel = +!$scope.toggleModel;
                });
            });

            $scope.$watch('toggleModel', function (value) {
                $element.prop('checked', !!value);
            });
        }

        return {
            restrict: 'A',
            scope: {
                toggleModel: '='
            },
            link: link
        };
    });

HTML

<input type="checkbox" toggle-int toggle-model="intModel">
<span>Value: {{intModel}}</span>

Ответ 5

В результате я просто использовал инструкцию if на контроллере.

Пример:

$scope.status = ($scope.status === 1 ? true : false);