web-dev-qa-db-ja.com

angularモーダルが閉じない($ uibModal)

angular
.module('angProj')
.controller('UserCtrl',
    ['$scope', '$uibModal',
        function ($scope, $uibModal) {

            $scope.results = function (content, completed) {
                var modalInstance = $uibModal.open({
                        backdrop: 'static',
                        keyboard: false,
                        animation: $scope.animationsEnabled,
                        templateUrl: '/Scripts/angularApp/views/user-modal.html',
                        controller: 'UserModalCtrl',
                        resolve: {
                            items: function () {
                                return $scope.items;
                            }
                        }
                    });

                if (!completed || content.length === 0) {
                    return;
                }

        modalInstance.close();
        modalInstance.dismiss('cancel');

ユーザー追加の完了時にモデルを閉じることができません。ユーザーモーダルでプログレスバーが表示されます。コードはエラーなしで正常に実行されますが、モーダルは開いたままです。 $ uibModalInstanceも試しましたが、コントローラーがエラーをスローします:不明なプロバイダー(同じUserCtrlに$ uibModalInstanceを挿入できません)ui.bootstrap(ui-bootstrap-tpls-1.1.2.js)を挿入しています

御時間ありがとうございます。

5
Scorpio

UserModalCtrlコントローラー内でmodalInstance.close()を使用します

app.controller('UserModalCtrl', ['$scope', '$modalInstance' function($scope ,modalInstance {
  $scope.close = function () {
   modalInstance.close();
  };
}]);
5
Rock

私は似たようなことをしたと思います。

私はこのような$modalコントローラーを持っています

angular.module('myApp').controller('infoCtrl', function ($scope, $uibModalInstance, loading) {

  $scope.editable = loading;

  $scope.$watch('editable.status', function(newValue, oldValue) {
    if (newValue == 'success'){
        // close modal
        $uibModalInstance.close('ok');
    } else if (newValue == 'error') {
        // show error message
    } 
  });
});

注入されたloadingは次のようなサービスです

myApp.factory('loading', function() {
  return {
    status: ''
  }
});

また、読み込みサービスのステータスを「成功」に変更すると(モーダルコントローラーではなく、どこからでも)モーダルが閉じられます。

これがまさにあなたが求めていたものであるかどうかはわかりませんが、それが役立つことを願っています。また、何か不明な点があるかどうかを尋ねてください。

編集:つまり、値がisCompleted: falseのサービスがあり、そのサービスをモーダルコントローラーに挿入し、$watch関数を使用するとします。次に、そのisCompletedtrueに変更されたら、モーダルを閉じます。

0
sch