0

我基本上希望当用户点击一个复选框时,他们的决定立即被撤销并且复选框未被选中。下面的代码不起作用。我尝试了其他变体,例如 value = !value 而不是 value = false 并尝试将另一个控制器变量初始化为等于复选框变量并更改另一个控制器变量。这些都不起作用;基本上,除非首先初始化应用程序,否则我无法设置复选框状态。

HTML 代码:

<input type="checkbox" ng-model="avariabledefinedincontroller" ng-click="changemystate(avariabledefinedincontroller)">

控制器代码:

$scope.avariabledefinedincontroller = false;


$scope.changemystate = function(value){
  if (value == true) {
    value = false;

 }

 else {
   value = value;
 }

};
4

4 回答 4

2

传入changemystate的值将是复选框被单击时的值。所以如果你想让它保持在那个值,你可以设置一个超时来将它恢复到那个值。不需要否定。

此外,分配一个值value不会做任何事情。您必须修改范围变量。如果要识别被单击项目的范围变量,可以传入一个字符串:

function MyController($scope, $timeout) {
  $scope.mybool = false;

  $scope.changemystate = function(key) {
     var value = $scope[key];
     $timeout(function () {
         $scope[key] = value;
     }, 0);
  };
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
<div ng-app="" ng-controller="MyController">
  <input type="checkbox" ng-model="mybool" ng-click="changemystate('mybool')" />
  {{mybool}}
</div>

于 2015-03-18T18:32:21.113 回答
1

实际上,你不需要一个函数:

在模板中:

<input type="checkbox" ng-model="avariabledefinedincontroller" />

在控制器中,您将拥有变量:

// Default state
$scope.avariabledefinedincontroller = false;

小提琴


编辑:这个问题的目的实际上是防止用户选中复选框,但不禁用复选框。为此,@JLRishe 的回答很好地解决了这个问题,尽管我个人会添加状态值作为参数设置setState

angular.module('demoApp', []).controller('DemoController', function($scope, $timeout) {
  $scope.myVar = false;

  $scope.setState = function (varName, val) {
    $timeout(function() {
        $scope[varName] = val;  
    }, 0);
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.js"></script>
<div ng-app="demoApp" ng-controller="DemoController">
  <input type="checkbox" ng-model="myVar" ng-click="setState('myVar', false)" />
  {{myVar}}
</div>

于 2015-03-18T18:34:58.533 回答
0

V你也可以使用简写:

<input type="checkbox" ng-model="avariabledefinedincontroller" ng-click="aVariable = !aVariable"/>
于 2015-03-18T18:36:50.503 回答
0

您可以使用许多选项,但以防万一这可以帮助某人,我做了两件事。

  • 我传递了 $event 以便我可以运行 event.preventDefault() (所以它不会被检查)

    1. ng-click="changemystate($event, avariabledefinedincontroller)">
    2. 在 $scope.changemystate() 然后我添加了事件参数,并调用 event.preventDefault()
  • 其次,我只是添加了一个return,以便该方法终止,因此无需回滚该值,因为它首先阻止了它的更新。

于 2017-03-09T14:16:08.577 回答