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 になります。これは非同期の問題である可能性があります。
すべての提案を歓迎します。