使用模态的父子范围问题:使用带有角度引导模式的角度ui路由器($ uibModal)

时间:2016-11-23 14:43:54

标签: angularjs angular-ui-router angular-ui-bootstrap bootstrap-modal angular-ui

这是我目前的代码:

家长控制器



        vm.animationsEnabled = true;

        vm.open = function (size) {
          var modalInstance = $uibModal.open({
            animation: vm.animationsEnabled,
            templateUrl: 'app/entities/interview-stage/interview-stage-list-add-dialog.html',
            controller: 'InterviewStageListAddDialogController',
            controllerAs: 'vm',
            size: 'cs',
          });

          modalInstance.result.then(function (selectedItem) {        	 
        	vm.interviewPlanSetUp.push(selectedItem);        	
          }, function () {
            //$log.info('Modal dismissed at: ' + new Date());
          });
        };




模态控制器

没有什么重大事项:我正在选择一个值并将结果传回父控制器



function save () {
        	
        	vm.selectedStage.rounds=vm.selectedRound;
        	$uibModalInstance.close(vm.selectedStage);
        	$scope.$emit('gorecruitApp:interviewStageUpdate', 'test');
        }




这很好。

然而,当我尝试通过UI -Router尝试这样做时,我无法访问" Parent Scope"

我正在做以下



.state('interview-stage.addStage',{
               parent:'job-setup.new',
               url:'/addStage',
               data:{
                       authorities: ['ROLE_USER']
               },
               onEnter:['$stateParams', '$state', '$uibModal', function($stateParams, $state, $uibModal) {
                $uibModal.open({
                    templateUrl: 'app/entities/interview-stage/interview-stage-list-add-dialog.html',
                    controller: 'InterviewStageListAddDialogController',
                    controllerAs: 'modal',
                    scope: $scope,
                    backdrop: 'static',
                    size: 'cs',
                    resolve: {
//                        entity: ['InterviewStage', function(InterviewStage) {
//                            return InterviewStage.get({id : $stateParams.id}).$promise;
//                        }]
                    }
                }).result.then(function() {
                    $state.go('job-setup.new', null, { reload: 'job-setup.new' });
                }, function() {
                    $state.go('^');
                });
            }]
        })




父控制器是附加到 job-setup.new 的控制器,它是 interviewstage.addStage

的父级

我尝试了一些建议。到目前为止没有任何工作。有什么指针吗?

编辑:这是一个掠夺者:https://plnkr.co/edit/HJT1f1C23s2HQ2jTcy9p?p=preview

此处从模态返回的数据应显示在" partial-home.html"

1 个答案:

答案 0 :(得分:0)

最简单的方法是将数据作为状态参数从模态状态传递回父状态,因此您可以设置父状态,如:

state('job-setup.new',{
  url:'/new',
  params: { item: null },
  ...

然后当您将所选项目作为close方法的参数传递出模态时,您可以将params对象中的数据设置为返回父状态:

.result.then(function modalClosed(selectedItem) {
  $state.go('home', { item: selectedItem }, { reload: true });
}, function modalDismissed() {
  $state.go('^');
});

Here is a functioning fork of the plunker you provided

其他一些事情:我将你使用的ui-router的版本从0.2.something提升到0.3.1 - 而1.0.0版本还有更多值得探索的功能。而且我认为你误解了reload上的$state方法。当您在reload的选项块中传递$state.go(stateName, params, options)属性时,就像对模态关闭事件一样,reload的值应为true或false。如果您正在调用$state.reload(stateName),那么您可以将状态名称作为字符串传递。 See the docs for more details

相关问题