我正在使用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
});
}
};
}]);
这段代码在我的控制器中:
$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');
在控制器级别范围内,它完全正常。
我什么时候尝试使用它:
$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
});
}
};
}]);
答案 0 :(得分:2)
问题是使用$.ajax
,您应该切换到使用$http
。
更改范围的角度核心之外发生的任何事件都需要通知角度,以便它可以在视图中运行摘要。
您可以在$scope.$apply()
的回调中致电$.ajax
来运行摘要