0

モジュールの 1 つに多数の繰り返しコードがあり、これをすべてのコントローラーから取り出す最善の方法について非常に混乱しています。ユーザー プロファイルのリストを管理するサービスがあります。これらはローカルの sessionStorage に保存されますが、空の場合、サービスは API に対して $http 呼び出しを行い、結果をキャッシュします。ユーザーはいくつかの異なるページのいずれかに入る可能性があるため、画面を表示する前にデータが読み込まれていることを確認する必要があります。$modal を使用して、プロファイル サービスが考えている間にプロファイルをロードしていることを示すボックスをポップアップ表示します。sessionStorage にある場合は、まばたきです。API 呼び出しを行う必要がある場合は、そうしている間、数秒間待機します。

これが私のコントローラーの繰り返しコードです:

var modal = $modal.open({ templateUrl: 'template/modal/loadingProfile.html' });
  profileService.getUserBySequence($routeParams.sequence).then(function (data) {
    $scope.user = data;
    profileService.getProfileForUser($scope.user.Sequence).then(function (data) {
      var stop = $timeout(function () {
      if (modal.opened) {
        modal.close();
        $timeout.cancel(stop);
      }
    }, 100);
    $scope.profile = data;
  });
});

これは、すべてのコントローラーの上部にあるのはあまり快適ではありません。プロファイル サービスを次に示します。

function getUserBySequence(sequence) {
    var defer = $q.defer();
    getUserList().then(function (data) {
        defer.resolve(data['_' + sequence]);
    }, function(result) {
        alertService.show(result.data.flash);
        defer.reject();
    });
    return defer.promise;
}

function getUserProfile(sequence) {
 var defer = $q.defer();
 var profile = sessionService.get('profile.' + sequence, true);
 if (profile) {
    defer.resolve(profile);
 } else {
    var companyId = sessionService.get('companyId');
    $http.get("http://domain.com/api/getProfile?id=" + companyId + "&sequence=" + sequence).then(function (result) {

       // only parse if a string
       if (typeof result.data == "string") {
          profile = JSON.parse(result.data);
       } else {
          profile = result.data;
       }

       sessionService.set('profile.' + sequence, profile, true);
       defer.resolve(profile);
    }, function (result) {
       sessionService.unset('profile.' + sequence);
       alertService.show(result.data.flash);
       defer.reject();
    });
 }
 return defer.promise;
}

コントローラーをクリーンアップする最良の方法は何ですか?

4

0 に答える 0