通过modalService将泛型解析对象传递给ui-bootstrap模式

时间:2015-10-19 21:44:22

标签: javascript angularjs angularjs-scope angular-ui-bootstrap bootstrap-modal

我一直关注这篇关于构建通用模态服务的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的后期部分。仍然没有效果。

我觉得这应该是一件相当简单的事情,因为这不是一个非常不寻常的情况。

我错过了什么,这将让我使用我想要通过解析参数的函数?

0 个答案:

没有答案