AngularJS - 在范围更改时使用if else语句更改变量值

时间:2016-06-05 13:37:49

标签: javascript angularjs

当另一个范围更改其值时,我有一个我想要更改的变量。

$scope.switch = true;

var thing;
if ($scope.switch == false) {
    thing = "givesFalse";
}
else {
    thing = "givesTrue";
};
this.thingscope = thing;

因此,当我将$scope.switch值更改为false时,this.thingscope应输出givesFalse。为了更改范围值,我使用ng-click:

<div ng-controller="myCtrl as myCtrl" ng-app="myApp">
    {{myCtrl.thingscope}}
    <br>
    <a ng-click="switch = !switch">{{switch}}</a>   
</div>

但即使我可以看到范围确实更新,变量thing似乎也不会同时更新。你可以看到工作的plunkr here。提前谢谢!

2 个答案:

答案 0 :(得分:3)

您有两个选择:

0 - 自动:使用Watch

$scope.$watch('switch', function () {
  $scope.thing = $scope.switch ? "givesTrue" : "givesFalse";
});

1 - 手动:使用可更改两个值的自定义功能。

ng-click="switch = !switch"

将其更改为:

ng-click="customFunction()"

在控制器中定义:

$scope.customFunction = function () {
  $scope.switch = !$scope.switch;
  $scope.thing = $scope.switch ? "givesTrue" : "givesFalse";
}

答案 1 :(得分:1)

重点是,当您的控制器实例化时,您的Controller代码将只执行一次。 如果您希望它响应更改,则需要使用$watch

$scope.$watch('switch', function(newSwitchValue, oldSwitchValue) {
  if ($scope.switch == false) {
    $scope.thing = "givesFalse";
  }
  else {
    $scope.thing = "givesTrue";
  }
});

在体系结构和性能非常重要的真实应用中,我建议您直接通过 ng-click 调用函数。

ng-click="onClickSwitch()"

然后在 $ scope 中定义函数 onClickSwitch()

$scope.onClickSwitch = function() {
    $scope.switch = !$scope.switch;
    [code as above]
}