Как ввести параметры в функцию встроенного контроллера в $ uibModal - PullRequest
0 голосов
/ 28 февраля 2019

У меня проблема с функцией открытия $ uibModal, в частности, с правильным вводом моих параметров в функцию встроенного контроллера.

Будучи новичком angularjs, я пробовал несколько вещей, ни одну из которых я не могу заставить работать.

Я использую код Visual Studio для написания угловых и глоткачтобы построить его.

Моя первая попытка (с использованием встроенной функции):

var modalInstance = $uibModal.open({
    animation: false,
    templateUrl: 'app/workform/LoanActions/LoanActionOverpay.modal.html',
    controller: function ($scope, $uibModalInstance) {
        $scope.showOverpay = true;
        $scope.OverpayAccount = function () {
            $scope.loading = true;
            var key = loanKeyFactory.getLoanKey();

            loanFactory.getLoanInformation(key).then(function (response) {
                $scope.loanType = response.LoanType;
                $uibModalInstance.dismiss('cancel');

                if ($scope.loanType == 'LineOfCredit')
                    ChooseLocLoanStatus();
                else
                    CreatePayment(true, null);
            });
        };
        $scope.cancel = function () {
            $uibModalInstance.dismiss('cancel');
            ClearForm();
        }
    },
    size: 'md',
    backdrop: 'static',
    keyboard: false
})

Я не получил ошибок при запуске gulp serve-build из кода VS, и код был выполнен, как и ожидалось.Однако после сборки и выпуска в TFS я получаю эту ошибку: [$injector:unpr] Unknown provider: eProvider <- e.

Моя вторая попытка:

var modalInstance = $uibModal.open({
    animation: false,
    templateUrl: 'app/workform/LoanActions/LoanActionOverpay.modal.html',
    controller: OverpayCtrl,
    size: 'md',
    backdrop: 'static',
    keyboard: false
})

var OverpayCtrl = function ($scope, $uibModalInstance) {
    $scope.showOverpay = true;
    $scope.OverpayAccount = function () {
        $scope.loading = true;
        var key = loanKeyFactory.getLoanKey();
        loanFactory.getLoanInformation(key).then(function (response) {
            $scope.loanType = response.LoanType;
            $uibModalInstance.dismiss('cancel');
            if ($scope.loanType == 'LineOfCredit') {
                ChooseLocLoanStatus();
            }
            else {
                CreatePayment(true, null);
            }
        });
    };
    $scope.cancel = function () {
        $uibModalInstance.dismiss('cancel');
        ClearForm();
    };
}

Я получил те же результаты, что и моя первая попытка, т.е. нетошибки при запуске gulp serve-build из кода VS и кода, выполняемого как ожидалось.Но я получил ту же ошибку после сборки и выпуска в TFS: [$injector:unpr] Unknown provider: eProvider <- e.

После еще нескольких неудачных попыток, которые я опущу, чтобы сэкономить место, я вернулся и провел еще несколько исследований своего первогопопытка.Благодаря принятым ответам на этот пост и этот пост , я обнаружил, что из-за минимизации мне нужно было настроить способ ввода моих параметров $scope и $uibModalInstance в мойфункция встроенного контроллера. Этот принятый ответ предлагает использовать расширенный синтаксис.

Моя последняя попытка и где я сейчас нахожусь:

var modalInstance = $uibModal.open({
    animation: false,
    templateUrl: 'app/workform/LoanActions/LoanActionOverpay.modal.html',
    controller: ['$scope, $uibModalInstance', function ($scope, $uibModalInstance) {
        $scope.showOverpay = true;
        $scope.OverpayAccount = function () {
            $scope.loading = true;
            var key = loanKeyFactory.getLoanKey();

            loanFactory.getLoanInformation(key).then(function (response) {
                $scope.loanType = response.LoanType;
                $uibModalInstance.dismiss('cancel');

                if ($scope.loanType == 'LineOfCredit')
                    ChooseLocLoanStatus();
                else
                    CreatePayment(true, null);
            });
        };
        $scope.cancel = function () {
            $uibModalInstance.dismiss('cancel');
            ClearForm();
        }
    }],
    size: 'md',
    backdrop: 'static',
    keyboard: false
})

Хотя я не получил никакой сборкиошибки из кода VS, при попытке выполнить код я получил эту ошибку: [$injector:unpr] Unknown provider: $scope, $uibModalInstanceProvider <- $scope, $uibModalInstance.

Я надеюсь, что кто-то может поделиться некоторым пониманием того, что я делаю неправильно.

Вопрос: Как мне ввести параметры в функцию встроенного контроллера?

ОБНОВЛЕНИЕ:

Просматривая мой код (моя последняя попытка), я понял пару вещей.

Во-первых, когда я вводил свои параметры в виде строк, я не вводил их в виде отдельных строк, то есть '$scope, $uibModalInstance' вместо '$scope', '$uibModalInstance'.

Второе, что я заметилбыло то, что я не вводил loanKeyFactory или loanFactory, оба из которых используются в функции.

После внесения этих изменений я подумал наверняка, что это сработает.Но так же, как и раньше, я мог заставить его собирать и выполнять локально, но не после сборки и выпуска в TFS.Я получил ту же ошибку [$injector:unpr] Unknown provider: eProvider <- e, что и раньше.

ОБНОВЛЕНИЕ 2:

Хорошо, поэтому я не думаю Я идупсих.Но один из моих сотрудников спросил, могу ли я воспроизвести ошибку для него, чтобы он мог посмотреть.Я пошел на наш тестовый сервер, где TFS выпускает проект, и я не смог заставить его работать NOT !Это верно, это волшебно работает сейчас.Со вчерашнего дня я построил и выпустил отдельный проект.После этого я создал и выпустил тот же код , который раньше не работал, и теперь это так.Я не совсем понимаю, как создание новой сборки и выпуска с одним и тем же кодом могло бы «исправить» это, но я не жалуюсь.

1 Ответ

0 голосов
/ 02 апреля 2019

На тот случай, если кто-нибудь окажется здесь, пытаясь выяснить, как ввести параметры во встроенный контроллер, то, что в конечном итоге сработало, это моя последняя попытка использовать расширенный синтаксис с изменениями из первого обновления.

var modalInstance = $uibModal.open({
    animation: false,
    templateUrl: 'app/workform/LoanActions/LoanActionOverpay.modal.html',
    controller: ['$scope', '$uibModalInstance', 'loanKeyFactory', 'loanFactory', function ($scope, $uibModalInstance, loanKeyFactory, loanFactory) {
        $scope.showOverpay = true;
        $scope.OverpayAccount = function () {
            $scope.loading = true;
            var key = loanKeyFactory.getLoanKey();

            loanFactory.getLoanInformation(key).then(function (response) {
                $scope.loanType = response.LoanType;
                $uibModalInstance.dismiss('cancel');

                if ($scope.loanType == 'LineOfCredit')
                    ChooseLocLoanStatus();
                else
                    CreatePayment(true, null);
            });
        };
        $scope.cancel = function () {
            $uibModalInstance.dismiss('cancel');
            ClearForm();
        }
    }],
    size: 'md',
    backdrop: 'static',
    keyboard: false
})
...