在函数中传递$ scope变量不会改变

时间:2014-11-20 15:25:27

标签: javascript angularjs

我有这个应用程序具有不同的主题,用户可以从导航栏中选择。此时我只是想将变量从false更改为true。

以下是我正在为导航工作的代码:

   <li>
       <a  ng-click="toggleTheme(blackWhite)">  Black and White theme</a>
   </li>

这是控制器中的代码。

 $scope.blackWhite = false;
 //other themes are false
 $scope.toggleTheme = function(theme){
 theme = !theme;
 console.log($scope.blackWhite);//its still false
 }

我该怎么做?感谢

2 个答案:

答案 0 :(得分:4)

您实际上是将$ scope.blackWhite的值传递给该函数,而不是对$ scope.blackWhite的引用。因此,您需要使用新值更新$ scope变量,如下所示:

$scope.toggleTheme = function(theme) {
    $scope.blackWhite = !theme;
}

或者,更好的是,根本不要传递变量,因为你只是切换一个布尔值:

$scope.toggleTheme = function() {
    $scope.blackWhite = !$scope.blackWhite;
}

然后你的标记将是:

<a ng-click="toggleTheme()">Black and White theme</a>

答案 1 :(得分:2)

如果您传递一个字符串来引用它,这应该可以正常工作:

<li>
  <a ng-click="toggleTheme('blackWhite')">Black and White theme</a>
</li>

控制器

$scope.blackWhite = false;

$scope.toggleTheme = function(theme){
  $scope[theme] = !$scope[theme];
}

您不需要直接在您的函数中设置blackWhite或任何其他变量。最好尽可能地分离,这是你最初使用它的地方:))