我在使用$ 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 post和this 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'
。
我注意到的第二件事是我没有注射loanKeyFactory
或loanFactory
,两者都在函数中使用。
在做出这些改变之后,我认为它确实会起作用。但和以前一样,我可以让它在本地构建和执行,但不能在TFS中构建和发布之后。我收到了和以前一样的[$injector:unpr] Unknown provider: eProvider <- e
错误。
更新2:
好的,所以我不认为我会发疯。但我的一位同事问我是否可以为他重现错误,以便他可以看看。我去了TFS发布项目的测试服务器,我无法让它工作!没错,现在神奇地工作了。从昨天起,我建立并发布了一个单独的项目。之后,我构建并发布了以前不能正常工作的相同代码,现在就是这样。我不完全理解在同一代码上进行新构建和发布如何“修复”它,但我不是在抱怨。
在这种情况下,任何人都会在这里试图弄清楚如何将参数注入内联控制器,最终有效的是我最后一次尝试使用扩展语法和第一次更新的更改。
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
})