データがロードされる前に単純なローダーを表示する方法を知りたいです。私は ng-grid-1.3.2 を使用しています。グーグルで調べていますが、例が見つかりませんでした。さよなら
6 に答える
Maxim Shoustinが提案したように、 (非推奨の) Response Interceptorsを使用するJim Lavinの angularjs-spinner を使用できます。
ここで最もよく説明されていると思います: http://codingsmackdown.tv/blog/2013/04/20/using-response-interceptors-to-show-and-hide-a-loading-widget-redux/
一言で言えば、彼の最初の解決策では、ng-grid アプリのためにしなければならないことは次のとおりです。
1 ) ローディング gif を html に追加します (ローディング gif については、こちらをご覧ください) 。
<div id="loadingWidget" class="row-fluid ui-corner-all" style="padding: 0 .7em;" loading-widget >
<div class="loadingContent">
<p>
<img alt="Loading Content" src="images/ajax-loader.gif" /> Loading
</p>
</div>
</div>
2)アプリレベルモジュールを宣言したらすぐに、コードでhttpリクエストのレスポンスインターセプターを構成ブロックに追加します
var app = angular.module('myCoolGridApp', ['ngGrid']);
app.constant('_START_REQUEST_', '_START_REQUEST_');
app.constant('_END_REQUEST_', '_END_REQUEST_');
app.config(['$httpProvider', '_START_REQUEST_', '_END_REQUEST_', function ($httpProvider, _START_REQUEST_, _END_REQUEST_) {
var $http,
interceptor = /* see extra details on codingsmackdown.tv */
$httpProvider.responseInterceptors.push(interceptor);
}
3)次に、loadingWidget ディレクティブを追加します
app.directive('loadingWidget', ['_START_REQUEST_', '_END_REQUEST_', function (_START_REQUEST_, _END_REQUEST_) {
return {
restrict: "A",
link: function (scope, element) {
element.hide();
scope.$on(_START_REQUEST_, function () {element.show();});
scope.$on(_END_REQUEST_, function () {element.hide();});
}
};
}]);
詳細については、codingsmackdownを参照してください。
私はあなたと同じ質問をしました。
私はそれについてこの素晴らしいチュートリアルを見つけました: http://brianhann.com/ui-grid-the-easiest-customization-youll-ever-write/
彼はvm.loading = true
サーバーからデータをフェッチしているときに使用しfalse
、完了後に変更しました。
var app = angular.module('app', ['ngTouch', 'ui.grid']);
app.controller('MainCtrl', ['$http', '$timeout', function ($http, $timeout) {
var vm = this;
vm.reset = reset;
vm.noData = noData;
vm.gridOptions = {
columnDefs: [
{ field: 'name' },
{ field: 'age' }
]
};
reset();
////////////
// Initialize our data source
function init() {
$http.get('data.json')
.success(function (data) {
vm.gridOptions.data = data;
})
.finally(function () {
vm.loading = false;
});
}
// Reset the data source in a timeout so we can see the loading message
function reset() {
vm.loading = true;
vm.gridOptions.data = [];
$timeout(function () {
init();
}, 1000);
}
function noData() {
vm.gridOptions.data = [];
}
}]);
HTML では、彼は ng-hide を使用して、gridOptions.data と vm.loading の値に基づいてスピナーを表示/非表示にします。
<div id="grid1" ui-grid="vm.gridOptions" class="grid">
<div class="grid-msg-overlay" ng-hide="!vm.loading">
<div class="msg">
<span>
Loading Data...
<i class="fa fa-spinner fa-spin"></i>
</span>
</div>
</div>
<div class="grid-msg-overlay" ng-hide="vm.loading || vm.gridOptions.data.length">
<div class="msg">
<span>No Data</span>
</div>
</div>
</div>
これが最終バージョンのプランカーです。
私も同様の動作が必要で、この答えに出くわしましたが、グリッド自体の中に何かを表示する必要があったため、ここにまとめました。私の考えは、その場で gridOptions を変更し、ローダーをグリッド内の行として表示することです。
loaderOptions = {
"columnDefs": [{
"name": "",
"field": "loading",
"enableColumnMenu": false,
"cellTemplate": '<div style="width:90px; margin:auto;"><span class="glyphicon glyphicon-refresh glyphicon-refresh-animate"></span> Loading...</div>'
}],
"data": [{
"loading": ""
}]
};