通过工厂隐藏对话框

时间:2016-07-07 12:25:01

标签: angularjs angular-material angularjs-factory

我正在使用棱角分明的材料。

我创建了一个工厂来显示加载模式。

我可以展示它,但我无法解雇它。

你能告诉我为什么,或者告诉我该怎么做?

这是我的工厂:

(function() {
'use strict';

angular
    .module('loveProjectApp')
    .factory('ProgressFactory', ProgressFactory);

ProgressFactory.$inject = ['$mdDialog'];

/* @ngInject */
function ProgressFactory($mdDialog) {
    var service = {
        show: show,
        cancel: cancel
    };
    return service;

    ////////////////

    function show() {
        $mdDialog.show({
            templateUrl: 'miscellaneous/progress/progress.dialog.html',
            parent: angular.element(document.body),
            clickOutsideToClose: false,
            fullscreen: false
        });
    }

    function cancel() {
        $mdDialog.hide();
    }
}
})();

我称之为:

        function logout() {
        ProgressFactory.show();
        authFactory.logout().then(function() {
            ToastFactory.successToast('SUCCESSES.DISCONNECTED');
            $state.reload();
            ProgressFactory.cancel();
        });

所以显示了加载器,但没有被解雇。

2 个答案:

答案 0 :(得分:1)

我创建了CodePen example代码,对话框关闭了。我使用$ timeout来复制您的authFactory.logout()来电。

这让我觉得

  • 未调用.then回调函数或
  • 在调用ProgressFactory.cancel();之前发生了一些阻止它被执行的事情

JS

.controller('AppCtrl', function($scope, $timeout, ProgressFactory) {
  $scope.logout = function () {
      ProgressFactory.show();
      $timeout(function () {
        ProgressFactory.cancel();
      }, 2000);
    }
})

答案 1 :(得分:0)

发现它!

我的服务器在我的应用程序使用的同一台机器上运行。

我在CreateText看得太快,所以我在工厂添加了1s超时,现在对话框正确解除了。

它现在就像一个魅力,谢谢!