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

时间:2016-01-31 00:26:57

标签: javascript angularjs

我是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是先前在控制器开头设置的范围变量。如何在successFunc方法中更改它们,请帮助。

2 个答案:

答案 0 :(得分:4)

更改您的成功回调:

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

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

答案 1 :(得分:0)

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

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

所以在这种情况下,通过在successFunc函数中使用以下apply方法手动应用$ 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