0

私は基本的に、ユーザーがチェックボックスをクリックすると、決定がすぐに取り消され、チェックボックスがオフになることを望んでいます。以下のコードは機能しません。value = false の代わりに value = !value のような他のバリエーションを試し、別のコントローラー変数をチェックボックス変数と等しくなるように初期化し、他のコントローラー変数を変更しようとしました。これはどれも機能しません。基本的に、アプリケーションが最初に初期化されていない限り、チェックボックスの状態を設定できません。

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

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

利用可能なオプションはたくさんありますが、これが誰かを助けることができる場合に備えて、私は2つのことをしました.

  • $event を渡して、event.preventDefault() を実行できるようにしました (そのため、チェックされません)。

    1. ng-click="changemystate($event, avariabledefinedincontroller)">
    2. $scope.changemystate() で、イベント パラメータを追加して呼び出しました event.preventDefault()
  • 次に、returnメソッドが終了するように a を追加しただけなので、値をロールバックする必要はありません。そもそも値が更新されないようにするためです。

于 2017-03-09T14:16:08.577 に答える
0

V省略形も使用できます。

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