Не удается изменить значение переменных области видимости на AngularJS - PullRequest
0 голосов
/ 04 августа 2020

Я хочу изменить значение переменной области видимости, но не могу его получить. Любопытно, что если я отлаживаю с помощью console.log ($ scope) вместо $ scope.subtotal, у меня есть все значения также с расширением Google ng-Inspector.

Большое вам спасибо!

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>

1 Ответ

0 голосов
/ 04 августа 2020

Звоните $scope.getTotalCart внутри ng-init. Это делает его одним из первых, что он делает сразу после вызова. Фактически, это происходит так быстро, что /getSubcartTotal еще даже не вернул значение. Это означает, что $scope.subtotal все еще не определен. Чтобы исправить это, вы можете, конечно, дать ему начальное значение или отложить вызов getTotalCart, поместив его внутри обратного вызова ответа, или, если вы используете uiRouter, вы должен иметь возможность использовать "resolve" для загрузки контроллера только после того, как запрос был завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...