如何将参数注入$ uibModal中的内联控制器函数

问题描述 投票:0回答:1

我在使用$ uibModal的open函数时出现问题,特别是将我的参数正确地注入到内联控制器函数中。

作为我的棱角分明的小伙子,我尝试了几件事,我都无法上班。

我正在使用Visual Studio Code来编写角度,并使用gulp来构建它。

我的第一次尝试(使用内联函数):

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
})

从VS Code中运行gulp serve-build时,我没有收到任何错误,并且代码按预期执行。但是,在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();
    };
}

我收到了与第一次尝试相同的结果,即在VS Code中运行gulp serve-build时没有错误,并且代码按预期执行。但是在TFS中构建和发布之后我收到了同样的错误:[$injector:unpr] Unknown provider: eProvider <- e

经过几次失败的尝试,我将省略节省空间,我回去做了一些关于我的第一次尝试的研究。感谢this postthis post上接受的答案,我发现由于缩小,我需要调整我将$scope$uibModalInstance参数注入我的内联控制器功能的方式。 This接受了答案建议使用扩展语法。

我的最后一次尝试,以及我现在所处的位置:

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 Code中收到任何构建错误,但在尝试执行代码时我收到了这个错误:[$injector:unpr] Unknown provider: $scope, $uibModalInstanceProvider <- $scope, $uibModalInstance

我希望有人能分享一些有关我做错的见解。

问题:如何将参数注入内联控制器功能?

更新:

在查看我的代码(我的最后一次尝试)时,我意识到了一些事情。

第一个是当我将参数作为字符串注入时,我没有将它们作为单独的字符串注入,即'$scope, $uibModalInstance'而不是'$scope', '$uibModalInstance'

我注意到的第二件事是我没有注射loanKeyFactoryloanFactory,两者都在函数中使用。

在做出这些改变之后,我认为它确实会起作用。但和以前一样,我可以让它在本地构建和执行,但不能在TFS中构建和发布之后。我收到了和以前一样的[$injector:unpr] Unknown provider: eProvider <- e错误。

更新2:

好的,所以我不认为我会发疯。但我的一位同事问我是否可以为他重现错误,以便他可以看看。我去了TFS发布项目的测试服务器,我无法让它工作!没错,现在神奇地工作了。从昨天起,我建立并发布了一个单独的项目。之后,我构建并发布了以前不能正常工作的相同代码,现在就是这样。我不完全理解在同一代码上进行新构建和发布如何“修复”它,但我不是在抱怨。

angularjs tfs gulp minify angularjs-controller
1个回答
0
投票

在这种情况下,任何人都会在这里试图弄清楚如何将参数注入内联控制器,最终有效的是我最后一次尝试使用扩展语法和第一次更新的更改。

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
})
© www.soinside.com 2019 - 2024. All rights reserved.