【发布时间】:2016-11-23 14:43:54
【问题描述】:
这是我当前的代码:
父控制器
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 执行此操作时,我无法访问“父范围”
我正在做以下事情
.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('^');
});
}]
})
Parent Controller 是附加到 job-setup.new 的控制器,它是 interviewstage.addStage
的父级我尝试了一些建议。到目前为止没有任何效果。有什么指点吗?
编辑:这是一个笨蛋:https://plnkr.co/edit/HJT1f1C23s2HQ2jTcy9p?p=preview
这里modal返回的数据应该出现在“partial-home.html”中
【问题讨论】:
-
当您说“将结果传回给父控制器”时,我假设您是通过“$scope.$emit('gorecruitApp:interviewStageUpdate', 'test');”来执行此操作的既然您将 vm.selectedStage 传递到您的模态 .close() 中,为什么不在 .result.then() 中处理它?
-
你能创建一个 plunker 吗?状态问题在 angular-ui-router 中并不少见,但如果没有看到 plunker 可以提供的一致的应用程序结构,就很难诊断。
-
@jbrown“您将 vm.selectedStage 传递到您的模态 .close() 为什么不在 .result.then() 中处理它”:如果您在打开时看到我的代码,我正在这样做来自父控制器的模态。 UI 路由器的挑战是 Modal 的父范围设置为 rootScope,因此 $scope.$emit 不会被 ParentController 捕获。我尝试在打开选项中使用 $scope:scope 。但它不起作用。我会尝试添加一个 plunker
-
@SummerDeveloper 添加了 plukr。提前致谢
-
我想你会发现解决方案仅仅是你的模板被混淆了(部分关于在主路由中被称为 onenter )并问自己应该在 about 中调用什么模式路线。它只是显示,没有类似的 onEnter。
标签: angularjs angular-ui-router angular-ui-bootstrap bootstrap-modal angular-ui