J'ai une fonction dans mon contrôleur qui ressemble à ceci:
AngularJS:
$scope.toggleClass = function(class){
$scope.class = !$scope.class;
}
Je veux le garder général en passant le nom de la classe que je veux basculer:
<div class="myClass">stuff</div>
<div ng-click="toggleClass(myClass)"></div>
Mais myClass
n'est pas transmis à la fonction angular. Comment puis-je faire fonctionner cela? Le code ci-dessus fonctionne si je l'écris comme ceci:
$scope.toggleClass = function(){
$scope.myClass = !$scope.myClass;
}
Mais ce n'est évidemment pas général. Je ne veux pas coder en dur dans la classe nommée myClass
.
Dans la fonction
$scope.toggleClass = function(class){
$scope.class = !$scope.class;
}
$scope.class
n'a rien à voir avec le paramètre class
. C'est littéralement une propriété sur $scope
appelé class
. Si vous souhaitez accéder à la propriété sur $scope
c'est-à-dire identifié par la variable class
, vous devrez utiliser l'accesseur de type tableau:
$scope.toggleClass = function(class){
$scope[class] = !$scope[class];
}
Notez que ce n'est pas Angular spécifique; c'est exactement comme cela que JavaScript fonctionne. Prenez l'exemple suivant:
> var obj = { a: 1, b: 2 }
> var a = 'b'
> obj.a
1
> obj[a] // the same as saying: obj['b']
2
De plus, le code
<div ng-click="toggleClass(myClass)"></div>
fait l'hypothèse qu'il existe une variable sur votre portée, par exemple $scope.myClass
qui correspond à une chaîne portant le nom de la propriété à laquelle vous souhaitez accéder. Si vous littéralement voulez passer la chaîne myClass
, vous aurez besoin
<div ng-click="toggleClass('myClass')"></div>
L'exemple ne rend pas très clair ce que vous recherchez (car il y a une classe nommée myClass
en haut div
).