0

angular $emit とコマンド ファイルを使用して、ページの読み込み中にスピナーを表示しようとしています。私のモデルは次のとおりです。

Model:

    model.load = function(){
        model.loading = true;
        $rootScope.$emit('loadMyPage', model.loading);
        return service.getData().then(storesResult, storesFault);
    }


       var storesResult = function (value) {
        model.categoriesLoading = false;
        $rootScope.$emit('loadMyPage', model.loading);
        model.stores = value.result;
        saveData();
    };

    var storesFault = function (value) {
        var data = value.data;
        var status = value.status;
        model.categoriesLoading = false;
        model.stores = null;
        $rootScope.$emit('loadMyPage', model.loading);
        $rootScope.$emit('systemAlert', {title: 'Loading Error', message: data, status: status, type: 'danger', timeout: 10000, showAsModal: true});
        return value;
    };

app.run で実行される My Command ファイル

command.execute = function () {
            $rootScope.$on('loadMyPage', onLoadingChange);
        };

        var onLoadingChange = function (event, value) {
            if (model.loading === true) {
                showModal('sections/modals/loading/loading.tpl.html');
            } else {
                hideModal();
            }
        };
};

問題は、ページの読み込み中に model.load からの $emit がコマンドで $on に移動しないことです。$on が呼び出されると、storesResult ブロックから実行されます。その結果、model.loading は常に false になります。これは非同期の問題である可能性があります。

すべての提案を歓迎します。

4

1 に答える 1