我是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方法中更改它们,请帮助。
答案 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