Javascript 通过modalService将通用解析对象传递给ui引导模式
我一直在关注这篇关于构建通用模式服务的帖子。到目前为止,这部分进展顺利,我不会在这里复制服务代码。我试图构建一个包含多个编辑数据选项的模式 为此,我正在使用该服务,并在resolve param上传入几个函数,有点像这样,我正在修改博客中的代码,以适应我正在尝试做的事情:Javascript 通过modalService将通用解析对象传递给ui引导模式,javascript,angularjs,angularjs-scope,angular-ui-bootstrap,bootstrap-modal,Javascript,Angularjs,Angularjs Scope,Angular Ui Bootstrap,Bootstrap Modal,我一直在关注这篇关于构建通用模式服务的帖子。到目前为止,这部分进展顺利,我不会在这里复制服务代码。我试图构建一个包含多个编辑数据选项的模式 为此,我正在使用该服务,并在resolve param上传入几个函数,有点像这样,我正在修改博客中的代码,以适应我正在尝试做的事情: app.module('yourModuleName').controller('CustomerEditController', ['$scope', '$location', '$routeParams'
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对象都没有解析,我传入的客户也没有解析。如果我记录这个对象,用JSON.stringify包装,我会得到一个空对象。如果我记录裸对象,firefox会保存一个引用,并显示正确填充的对象
我原以为问题会出现在范围阶段,所以我将modalService调用包装为$timeout,但没有效果。然后我想可能是因为我没有将resolve中的项目注入控制器,所以我查看了演示项目,并通过修改再次复制了一些代码。希望它能有所帮助:
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
}
特别是后一部分,注入参数。仍然没有效果
我觉得这应该是一件相当简单的事情,因为这不是一个非常不寻常的情况
我遗漏了什么,可以让我使用我想要通过resolve param传递的函数?首先,您的整个问题似乎都是基于一篇博客文章中的代码。这个问题应该独立存在,而不依赖外部联系。但是,即使我同意解析的行为与ui.bootstrap的$modal中的行为一样,那么每个解析参数都需要一个值或承诺,至少对于updateName函数来说,这不是什么happens@newdev我试图在这个问题中添加大量代码与依赖外部链接之间取得平衡。无论如何,我肯定使用了已解析的参数来交付非承诺数据。如果您想发布一个详细阐述您观点的答案,我们将不胜感激。@newdev我刚刚在ng route中找到了resolve的描述。它使用的语言意味着这些值可能是字符串,也可能不是字符串,如果字符串是服务的别名。否则,如果为函数,则注入该函数,并将返回值视为依赖项。如果结果是一个承诺,则在将其值注入控制器之前解决它。。。我的观点是updateName是一个不返回任何内容的函数;既不是值也不是函数。至于外部链接,可以这样想:如果链接断开了,你会问对未来的访问者有什么意义吗?@newdev除非我弄错了作为resolve参数一部分的updateName函数,否则它会返回作用域中的函数。这样就可以在模态的作用域上公开它,并将其绑定到ng click属性。在你的另一点上,我会让步的。今晚我会在家里更新这个问题。