0

我正在尝试创建一个在控制器之间共享的通用加载。所以,我创建了一个控制隐藏/显示状态的服务:

(function () {
    'use strict';

    var module = angular.module('main');
    var serviceId = "LoadingService";
    var ShowLoading = false;

    function LoadingService($rootScope) {

        function showLoading(value) {
            $rootScope.$broadcast(LOADING_CHANGED, value);
        }

        var service = {
            ShowLoading: showLoading
        }

        return service;
    }

    LoadingService.$inject = ['$rootScope'];
    module.service(serviceId, LoadingService);

}());

这是加载控制器:

(function () {
    'use strict';

    var app = angular.module("main");
    var controllerId = "rbLoading.controller";

    function loadingController($scope, LoadingService) {

        $scope.isLoading = false;

        $scope.$on(LOADING_CHANGED, function (event, data) {
            $scope.isLoading = data;
        });
    }

    app.controller(controllerId, loadingController);

    loadingController.$inject = ['$scope', 'LoadingService'];
}());

的HTML:

<div class="loading-panel" ng-if="isLoading">
    <!-- loading content-->

</div>

和指令:

(function () {
    'use strict';
    var loadingDirective = function (OPTIMISATION) {
        return {
            restrict: 'E',
            templateUrl: function (element, attr) {
                return 'App/components/shared/loading/loading.html';
            },
            controller: 'rbLoading.controller',
            controllerAs: 'loading'
        };
    }
    var app = angular.module('main');
    loadingDirective.$inject = ["OPTIMISATION"];
    app.directive('rbLoading', loadingDirective);
}());

当我更改 LoadingService 值时,它会触发 LOADING_CHANGED 事件。问题是 ng-if 没有按预期工作,尽管 data 变量具有正确的值。我错过了什么?

更新

更改为 ng-show 几乎可以解决问题。对于特定场景不起作用。我在尝试使用 html5 GeoLocation api 获取用户位置时显示加载,并在使用 10 秒后设置超时。

setTimeout(function () {
                    console.log("timeout");
                    LoadingService.ShowLoading(false);
                    }, 10000);

正在触发此 setTimeout 函数,但仍在显示加载。

4

0 回答 0