【问题标题】:AngularJS - change variable value with if else statement when scope changesAngularJS - 当范围改变时用 if else 语句改变变量值
【发布时间】:2016-06-05 21:54:34
【问题描述】:

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

$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。提前致谢!

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    你有两个选择:

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

    【讨论】:

    • 我使用了第二个,效果很好 (plnkr.co/edit/FGovwUjEZtaRgkO85S0q?p=preview) 感谢您的方法!
    • 这里是一个http://plnkr.co/edit/1DvOpeRsyXEhmQzgE7Nl?p=preview,基于您之前的 plnkr。两种实现方式:
    • @joe82 - 我的建议是您使用 $scope.watch 方法,因为它就是为此而构建的。让 Angular 为您完成大部分工作。
    • @JoséLezama 在第一个实现中,它应该如何工作?我无法通过单击切换链接在 plunkr 中切换它
    • @Joe82 检查 Plunkr:plnkr.co/edit/v8VscDRUhVd0IG0bNYjq?p=preview 请使用 $scope 代替这个(更 Angular 方式)。我假设您使用的是 lodash(或下划线,我更喜欢 lodash,所以我将 lodash 包含在下划线之上)。另外,我没有找到 ng-lodash CDN,但您必须使用更优雅的代码。 github.com/rockabox/ng-lodash 我使用它没有问题。我只是: - 将其更改为 $scope - 添加 lodash 库。
    【解决方案2】:

    主要的一点是当你的控制器被实例化时你的控制器的代码只会被执行一次。 如果您希望它响应更改,您需要使用$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]
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多