Javascript 通过modalService将通用解析对象传递给ui引导模式

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'

我一直在关注这篇关于构建通用模式服务的帖子。到目前为止,这部分进展顺利,我不会在这里复制服务代码。我试图构建一个包含多个编辑数据选项的模式

为此,我正在使用该服务,并在resolve param上传入几个函数,有点像这样,我正在修改博客中的代码,以适应我正在尝试做的事情:

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属性。在你的另一点上,我会让步的。今晚我会在家里更新这个问题。