Подтвердить что ты не робот

Установка параметров ngTrueValue и ngFalseValue

Я привязал флажок к значению:

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

Значение флажка установлено на 1 в контроллере:

function Controller($scope) {
    $scope.checkbox = 1
}

Однако первоначально флажок не отображается. Если изменить начальное значение $scope.checkbox на "1", это произойдет. (jsfiddle demo)

Я пробовал всевозможные варианты:

ng-true-value="{{1}}"
ng-true-value="{{Number(1)}}"
ng-true-value="{{parseInt('1')}}"

Ни один из них не работает. Как я могу сделать angular рассматривать аргументы как число?

4b9b3361

Ответ 1

Вы можете использовать ngChecked, если выражение правдиво, тогда специальный атрибут "checked" будет установлен на элементе

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

И вы можете использовать $scope.$watch для преобразования его в число

$scope.$watch(function(){
    return $scope.checkbox;
}, function(){
    $scope.checkbox = Number($scope.checkbox);
    console.log($scope.checkbox, typeof $scope.checkbox);
},true);

DEMO

Ответ 2

Я создал директиву для этого, кажется, работает нормально:

angular.module('app').directive('cdTrueValue', [function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attrs, ngModel) {
      ngModel.$parsers.push(function(v){
        return v ? scope.$eval(attrs.cdTrueValue) : scope.$eval(attrs.cdFalseValue);
      });
    }
  };
}]);

Использование:

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

DEMO

Ответ 3

У атрибутов HTML нет каких-либо типов. Они не могут содержать ничего другого, затем строку, поэтому она всегда является строкой. Конец истории.

Вы не можете различать между 1 и "1" в атрибуте HTML. Angular пытается идти в ногу с этим, поэтому будут работать только строки.

Ответ 4

Первый подход выше - это здорово. Это прекрасно работает. Вы также можете использовать директиву ng-change, если вам нужна динамическая модель (например, связанная с идентификатором или номером), если вы хотите работать с ID, которого вы не знаете заранее). Просто передайте модель в качестве параметра: ng-change = "fooBar (model [ID])", поймайте в функции контроллера и повторите тип Number (model [ID]). Это преобразует true как 1, false как 0, и вы можете работать с этим.