Подтвердить что ты не робот

Как передать параметр функции ng-click?

У меня есть функция в моем контроллере, которая выглядит следующим образом:

AngularJS:

$scope.toggleClass = function(class){
    $scope.class = !$scope.class;
}

Я хочу сохранить его общим, передав имя класса, который я хочу переключить:

<div class="myClass">stuff</div>
<div ng-click="toggleClass(myClass)"></div>

Но myClass не передается функции angular. Как я могу заставить это работать? Вышеприведенный код работает, если я пишу его следующим образом:

$scope.toggleClass = function(){
    $scope.myClass = !$scope.myClass;
}

Но это, очевидно, не является общим. Я не хочу жестко программировать в классе с именем myClass.

4b9b3361

Ответ 1

В функции

$scope.toggleClass = function(class){
    $scope.class = !$scope.class;
}

$scope.class не имеет ничего общего с параметром class. Это буквально свойство на $scope, называемое class. Если вы хотите получить доступ к свойству на $scope, который идентифицируется переменной class, вам нужно использовать аксессуар типа массива:

$scope.toggleClass = function(class){
    $scope[class] = !$scope[class];
}

Обратите внимание, что это не Angular; это именно то, как работает JavaScript. Возьмем следующий пример:

> var obj = { a: 1, b: 2 }
> var a = 'b'
> obj.a
  1
> obj[a] // the same as saying: obj['b']
  2

Кроме того, код

<div ng-click="toggleClass(myClass)"></div>

делает предположение, что в вашей области есть переменная, например. $scope.myClass, который оценивает строку, которая имеет имя свойства, к которому вы хотите получить доступ. Если вы буквально хотите передать строку myClass, вам понадобится

<div ng-click="toggleClass('myClass')"></div>

Пример не делает его супер понятным, что вы ищете (поскольку в верхней части div есть класс с именем myClass).