Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-范围更改时使用if else语句更改变量值_Javascript_Angularjs - Fatal编程技术网

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

Javascript AngularJS-范围更改时使用if else语句更改变量值,javascript,angularjs,Javascript,Angularjs,我有一个变量,当另一个作用域改变它的值时,我想改变它 $scope.switch = true; var thing; if ($scope.switch == false) { thing = "givesFalse"; } else { thing = "givesTrue"; }; this.thingscope = thing; 因此,当我将$scope.switch值更改为false时,thingscope应该输出givesFalse。为了更改范围值,我使用ng单击

我有一个变量,当另一个作用域改变它的值时,我想改变它

$scope.switch = true;

var thing;
if ($scope.switch == false) {
    thing = "givesFalse";
}
else {
    thing = "givesTrue";
};
this.thingscope = thing;
因此,当我将$scope.switch值更改为false时,thingscope应该输出givesFalse。为了更改范围值,我使用ng单击:

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

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

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

在一个架构和性能很重要的真实应用程序中,我建议您直接从ng click调用函数

然后在$scope中定义函数onClickSwitch


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

在一个架构和性能很重要的真实应用程序中,我建议您直接从ng click调用函数

然后在$scope中定义函数onClickSwitch

您有两种选择:

0-自动:使用手表

$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";
}
您有两种选择:

0-自动:使用手表

$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";
}

我真的不知道如何用我的代码实现它,因为它略有不同,请参阅更新的plunkr这里是一个没有使用$watch的fork我将其标记为正确,因为答案更完整,并且与我的方法相关。谢谢我真的不知道如何用我的代码实现它,因为它略有不同,请参阅更新的plunkr这里是一个没有使用$watch的fork我将其标记为正确,因为答案更完整,并且与我的方法相关。谢谢我用了第二个,效果非常好,谢谢你的方法!这是一个基于你以前的plnkr。对于这两种实现:@joe82-我的建议是使用$scope.watch方法,因为这就是它的构建目的。让Angular为您完成大部分工作。@JoséLezama在第一个实现中,它应该如何工作?我无法通过单击开关在plunkr中切换它link@Joe82检查Plunkr:请使用$scope,这是一种更具角度的方式。我假设您使用的是lodash或下划线,我更喜欢lodash,因此我将lodash包括在内,而不是下划线。另外,我没有找到ng lodash CDN,但您必须使用它来获得更优雅的代码。我使用它没有问题。我只是:-将此更改为$scope-添加lodash库。我使用了第二个库,它工作得非常好,感谢您的方法!这是一个基于你以前的plnkr。对于这两种实现:@joe82-我的建议是使用$scope.watch方法,因为这就是它的构建目的。让Angular为您完成大部分工作。@JoséLezama在第一个实现中,它应该如何工作?我无法通过单击开关在plunkr中切换它link@Joe82检查Plunkr:请使用$scope,这是一种更具角度的方式。我假设您使用的是lodash或下划线,我更喜欢lodash,因此我将lodash包括在内,而不是下划线。另外,我没有找到ng lodash CDN,但您必须使用它来获得更优雅的代码。我使用它没有问题。我只是:-将其更改为$scope-添加lodash库。