使用AngularJS:将单选按钮输入绑定到可能为null值的布尔值

时间:2016-02-13 20:52:29

标签: angularjs

使用AngularJS v1.5.0,我试图将无线电输入字段绑定到布尔变量,该变量可以是:true,false或null。使用ng-value指令将空值设置为false。

_([a-z]+)

您是否知道如何做到这一点? 谢谢!

2 个答案:

答案 0 :(得分:1)

这在1.4.9中对我有用。 1.5.0和1.6.3

<span ng-init="foo = {value: null}">{{foo}}</span>
<input type="radio" ng-model="foo.value" ng-value="null" ng-checked="foo.value === null" />Null
<input type="radio" ng-model="foo.value" ng-value="true" />True
<input type="radio" ng-model="foo.value" ng-value="false" />False

JsFiddle

答案 1 :(得分:0)

如果查看ngValue指令的source code,您会注意到它只运行范围。$ eval()对值为true,false或数字。

var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
var ngValueDirective = function() {
  return {
    restrict: 'A',
    priority: 100,
    compile: function(tpl, tplAttr) {
      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
        return function ngValueConstantLink(scope, elm, attr) {
          attr.$set('value', scope.$eval(attr.ngValue));
        };
      } else {
        return function ngValueLink(scope, elm, attr) {
          scope.$watch(attr.ngValue, function valueWatchAction(value) {
            attr.$set('value', value);
          });
        };
      }
    }
  };
};

要克服此问题并在该组中包含null,您需要编写自己的指令,或者在提交表单时以编程方式处理转换值。