从内部函数更改 AngularJS 范围变量

Changing AngularJS scope variables from an inside function

本文关键字:范围 变量 AngularJS 内部函数      更新时间:2023-09-26

嗨,我是 Angular 的新手,我正在尝试从控制器内部的函数更改(或设置)范围变量。这是我的代码:

$.ajax({
        type: "POST",
        url: URL,
        data: param = "",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: successFunc,
        error: errorFunc
    });
    function successFunc(data, status) {
            $scope.modalStatus = 'success';
            $scope.modalIcon = 'check';
            $scope.modalMessage = 'Invoice Saved!';
            showNotification();
    }
    function errorFunc() {
        alert('error');
    }

$scope.modalStatus、$scope.modalIcon 和 $scope.modalMessage 是之前在控制器开头设置的作用域变量。我如何在那个成功Func方法中更改它们,请帮助。

更改成功回调:

function successFunc(data, status) {
  $scope.modalStatus = 'success';
  $scope.modalIcon = 'check';
  $scope.modalMessage = 'Invoice Saved!';
  showNotification();
  $scope.$apply();
}

此外,在一个应用程序中使用jQuery和Angular也是一种不好的做法。Angular 提供$http fo 请求。

为什么使用Jquery $ajax而AngularJs提供$http。

实际上,AngularJs 中有一个内部机制来应用更改,称之为$digest。当你使用JQuery时,它超出了angularJs的范围,它不应用$digest机制。

所以在这种情况下,通过在 successFunc 函数中使用以下应用方法手动应用$digest。

$scope.$apply(function() {
  $scope.modalStatus = 'success';
  $scope.modalIcon = 'check';
  $scope.modalMessage = 'Invoice Saved!';
});

此链接可以帮助您了解有关$apply和$digest的更多信息http://www.panda-os.com/2015/01/angularjs-apply-digest-and-evalasync/#.Vq1Z2lN95R0