【问题标题】:ng-model value switching from false to undefined instead of true when checkbox is clicked单击复选框时,ng-model 值从 false 切换为 undefined 而不是 true
【发布时间】:2018-04-05 08:47:57
【问题描述】:

我正在为输入复选框和 ng 模型而苦苦挣扎。 我用 false 初始化我的变量,将其设置为输入复选框上的 ng-model。显示时,值为假。单击复选框后,值将变为 undefined 而不是 true。

这是我的代码:

<div ng-app="app" ng-controller="Controller">
    <input id="check" type="checkbox" ng-model="model.noExpiry" ng-click="model.clickCheck()">Click
    <p>{{model.noExpiry}}</p>
</div>


var module = angular.module("app",[]);

    module.controller("Controller", function ($scope) {
      $scope.model = {};
      $scope.model.noExpiry = false; 

      $scope.model.clickCheck = function(){
        console.log($scope.model.noExpiry);
      }
});

如果我删除 ng-model 并将 model.clickCheck 函数更改为以下内容,它会正确地将变量从 false 更改为 true,反之亦然:

$scope.model.clickCheck = function(){

    if($scope.model.noExpiry) {
        $scope.model.noExpiry = false;
    }
    else {
        $scope.model.noExpiry = true;
    }

    console.log($scope.model.noExpiry);
}

当我用 true 初始化 model.noExpiry 时,该复选框被选中,但是当取消选中并再次选中它时,它变为 false,然后再次变为未定义。

有没有人知道为什么变量没有变为 true 而是变为 undefined?

AngularJs 版本:1.5.5

【问题讨论】:

  • 您是否在任何地方初始化您的模型? $scope.model = {};
  • @AlekseySolovey 是的,抱歉忘记写了
  • 那么你不应该得到 undefined,有错字什么的,但你的代码不足以复制问题
  • 但如果是这种情况,那么为什么它总是正确地更改为 false,但永远不会更改为 true?为什么在使用 workaroung 通过 ng-click 函数设置变量时它会起作用?

标签: javascript angularjs angular-ngmodel angularjs-ng-model


【解决方案1】:

原因是$scope.model 未定义。因此,$scope.model.noExpiry 属性无效。刚刚在控制器中添加了$scope.model = {}; 以生成有效对象。

请查看最终更新的代码:

var module = angular.module("app",[]);
    
    
    module.controller("Controller", function ($scope) {
      $scope.model = {};
      $scope.model.noExpiry = false;

      $scope.model.clickCheck = function(){
        console.log($scope.model.noExpiry);
      }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="Controller">
    <input id="check" type="checkbox" ng-model="model.noExpiry" ng-click="model.clickCheck()">Click
    <p>{{model.noExpiry}}</p>
</div>

【讨论】:

  • 您刚刚添加了“$scope.model = {};”,我看对了吗?我只是忘了把它写下来......它对我不起作用
  • 已经添加了工作代码sn-p,它在sn-p中工作。你检查过sn-p
  • 你用代码吗:if($scope.model.noExpiry) { $scope.model.noExpiry = false; } 其他 { $scope.model.noExpiry = true; }
  • 因为您的 ng-model for 复选框会为您执行此操作。您的上述情况可能会产生问题。
  • 我使用它作为解决方法。如果我只使用 ng-model 来初始化模型和 model.noExpiry=false 它不起作用
猜你喜欢
  • 2017-11-07
  • 1970-01-01
  • 2012-03-27
  • 2018-07-16
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2022-06-13
相关资源
最近更新 更多