5

私は単純なコントローラーコードを持っています:

JS

$scope.showErrorAlert = false;


$scope.switchBool = function(value) {
    value = !value;
};

HTML

<div class="alert alert-error" ng-show="showErrorAlert">
                <button type="button" class="close" data-ng-click="switchBool(showErrorAlert)" >×</button>
              <strong>Error!</strong> {{errorTextAlert}}
             </div>

コードのスニペットから、値を変更しようとしていることがわかり$scope.showErrorAlertます。

ただし、機能しません。value変更はありませんshowErrorAlert

誰かが理由とそれを機能させる方法を教えてもらえますか?

ありがとうございました

4

3 に答える 3

6

JS はパラメーターを値で渡します。参照渡しの簡単な代替方法は、(プロパティ自体ではなく) オブジェクトを渡すことです。

いえ

$scope.showErrorAlert = { value: false };

$scope.switchBool = function(obj) {
    obj.value = !obj.value;
};

または、$scope 自体を操作するように switchBool コードをリファクタリングすることもできます。「showErrorAlert」をハードコーディングまたは抽象化する必要があります。要件によって異なります。

于 2013-06-30T12:35:18.957 に答える
2
$scope.showErrorAlert = false;


$scope.switchBool = function(value) {
    value = !value;
};

に値を渡すswitchBool場合、参照ではなく値で渡されます。したがって、値はその関数内でのみ変更されます。

のように var 名を渡してから、$scope.showErrorAlert内で次のようなことを行うことができますswitchBool

eval(value + " = !" + value);

実際: http://jsfiddle.net/Npp2N/1/

$scope.showErrorAlert = false;
$scope.switchBool = function(value) {
    eval(value + " = !" + value);
};

console.log($scope.showErrorAlert); // false
$scope.switchBool("$scope.showErrorAlert");
console.log($scope.showErrorAlert); // true
于 2013-06-30T12:31:57.647 に答える