我一直关注这篇关于构建通用模态服务的blog帖子。到目前为止,这部分进展顺利(我不会在这里复制服务代码)。我正在尝试构建一个包含多个编辑数据选项的模态。
为此,我正在使用该服务,并在一个解析参数上传递几个函数,有点像这样(我正在调整博客中的代码,以适应我正在尝试做的事情):< / p>
app.module('yourModuleName').controller('CustomerEditController', ['$scope', '$location',
'$routeParams', '$timeout', 'config', 'dataService', 'modalService',
function ($scope, $location, $routeParams, $timeout, config,
dataService, modalService) {
$scope.updateName = function(customerId,name){
dataService.updateName(customerId,name);
}
$scope.editCustomer = function (customer) {
dataService.lockCustomer(customer.id);
var custName = customer.firstName + ' ' + customer.lastName;
var modalOptions = {
closeButtonText: 'Cancel',
actionButtonText: 'Confirm Edit',
headerText: 'Edit ' + custName + '?',
bodyText: 'Select edit option.'
};
var modalDefaults = {
resolve : {
updateName: function(){
return $scope.updateName
},
customer: function(){
return customer
},
}
}
modalService.showModal(modalDefaults, modalOptions).finally(function (result) {
dataService.unlockCustomer(customer.id);
});
}
}]);
但是当我打开模态时,$scope
个对象都没有解析,也没有我传入的customer
。如果我记录对象,包裹在JSON.stringify
我得到一个空对象。如果我记录裸对象,firefox会保存一个引用,并向我显示正确填充的对象。
我期待问题与范围阶段相关,因此我将modalService
调用包裹在$timeout
中,但没有效果。然后我认为可能是因为我没有把决心中的项目注入控制器,所以我查看了演示项目并复制了一些代码(再次使用我的改编)。希望它会有所帮助:
if (!tempModalDefaults.controller) {
tempModalDefaults.controller = function ($scope, $modalInstance) {
$scope.modalOptions = tempModalOptions;
$scope.modalOptions.ok = function (result) {
$modalInstance.close('ok');
};
$scope.modalOptions.close = function (result) {
$modalInstance.close('cancel');
};
};
var injectParams = ['$scope', '$modalInstance'];
if(tempModalDefaults.resolve){
injectPramas.concat(_.keys(tempModalDefaults.resolve))
}
tempModalDefaults.controller.$inject = injectParams
}
特别是注入params的后期部分。仍然没有效果。
我觉得这应该是一件相当简单的事情,因为这不是一个非常不寻常的情况。
我错过了什么,这将让我使用我想要通过解析参数的函数?