首页 > 解决方案 > 无法更改 AngularJS 上的范围变量值

问题描述

我想编辑范围变量值,但我无法得到它。奇怪的是,如果我使用 console.log($scope) 而不是 $scope.subtotal 进行调试,那么我还可以通过 ng-inspector Google 扩展获得所有值。

十分感谢!

angular.module('myApp', [])
.controller('CartController', ['$scope', '$http', function ($scope, $http) {
  function getSubtotalCart(){
    $.getJSON('/getSubtotalCart', function (response, status, xhr) {
      if (status == 'success') {
        $scope.subtotal = "Hello"; //response;
        $scope.$apply();
      } else {
        console.log(xhr);
      }
    });
  }

  $scope.getTotalCart = function(bool){
    console.log('Running');
    (bool) && getSubtotalCart();
    console.log($scope);
    console.log($scope.subtotal);
  };

}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container" ng-app="myApp" ng-controller="CartController" ng-init="getTotalCart(true)" ng-cloak></div>

标签: javascriptangularjs

解决方案


$scope.getTotalCart在里面打电话ng-init。这使它成为它一被调用就会做的第一件事。事实上,它发生得太快了,/getSubcartTotal甚至还没有返回值。这意味着它$scope.subtotal仍然是未定义的。要解决这个问题,你当然可以给它一个初始值,或者你可以getTotalCart通过将它放在响应回调中来延迟调用,或者,如果你正在使用uiRouter,你应该能够使用“resolve”来只加载请求完成的控制器。


推荐阅读