javascript - AngularJS Toaster 在回调时不显示

标签 javascript angularjs callback

我正在使用 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/

相关文章:

java - Spring异步RMI调用

javascript - Vue.js 单元测试 - 如何检查组件是否有方法?

javascript - Highcharts.js 不会呈现图表,它表示错误 "Cannot read property ' 系列' of undefined”

javascript - 小计未将更改后的值从数据库获取到输入框

javascript - 当密码或用户名错误时在登录中添加 toast

javascript - 使用 if 来检测使用 jQuery 的类

Javascript/AngularJs - 如何使用另一个数组中的对象填充数组?

angularjs - Pyramid 不适用于有 Angular 的 $http 帖子

javascript - 在 javascript 对象内执行回调函数

delphi - 将接口(interface)的方法作为参数传递