我正在使用 AngularJS Toaster 来显示 toast 消息。但我似乎无法让它与回调的结果一起工作,而且我真的不知道为什么。
我为 Toaster 创建了一项服务:
service.factory('$toasterservice', ['toaster',
function (toaster) {
return {
'show': function (type, title, text) {
return toaster.pop({
type: type,
title: title,
body: text,
showCloseButton: false
});
}
};
}]);
这段代码在我的 Controller 中:
$scope.submit = function (db) {
var params = {
username: db.credentials.username,
password: db.credentials.password,
database: db.name,
hostname: db.host,
port: db.port
};
$dbservice.testConnection(params, function (response) {
if (response.error)
{
console.log(response.error)
}
else
{
console.log('correct!');
}
});
};
每当我输入这行代码时:
$toasterservice.show('error', 'TITLE', 'BODY');
在 Controller 级别范围内,它工作得很好。
每当我尝试使用它时:
$dbservice.testConnection(params, function (response) {
//HERE $toasterservice.show('error', 'TITLE', 'BODY');
});
这不起作用,我该如何解决这个问题?我似乎无法理解为什么会发生这种情况。
$dbservice:
service.factory('$dbservice', ['$constants',
function ($constants) {
return {
'testConnection': function (params, callback) {
$.ajax({
url: $constants.URL_TEST_CONNECTION,
dataType: 'json',
type: 'post',
contentType: 'application/x-www-form-urlencoded',
data: params,
success: callback,
error: callback
});
}
};
}]);
最佳答案
问题在于使用 $.ajax
,您应该切换到使用 $http
。
在 Angular 核心之外发生的任何改变范围的事件都需要通知 Angular,以便它可以在 View 中运行摘要。
您可以在 $.ajax
的回调中调用 $scope.$apply()
来运行摘要
关于javascript - AngularJS Toaster 在回调时不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750301/