1

這裏是我當前的代碼:

父控制器

 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) {   \t 
 
     \t vm.interviewPlanSetUp.push(selectedItem);   \t 
 
      }, function() { 
 
      //$log.info('Modal dismissed at: ' + new Date()); 
 
      }); 
 
     };

模態控制器

沒有大的事情:我選擇一個值,並將結果傳回給父控制器

function save() { 
 
     \t 
 
     \t vm.selectedStage.rounds=vm.selectedRound; 
 
     \t $uibModalInstance.close(vm.selectedStage); 
 
     \t $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('^'); 
 
       }); 
 
      }] 
 
     })

父控制器是連接到的控制器job-setup.new這是的父母interviewstage.addStage

我試過幾點建議。目前爲止沒有任何工作任何指針?

編輯:這裏是一個plunker:https://plnkr.co/edit/HJT1f1C23s2HQ2jTcy9p?p=preview

在這裏從模態返回的數據應該顯示在「局部/home.html」的

+0

當你說「將結果傳遞迴父控制器」我假設你是通過「$ scope」來做到這一點的。$ emit('gorecruitApp:interviewStageUpdate','test');「由於您將vm.selectedStage傳遞到您的模式.close()爲什麼不在.result.then()中處理它? – jbrown

+0

您可以創建一個plunker?狀態問題並不少見於angular-ui-router,但是如果沒有看到連貫的應用程序結構,就很難診斷,因爲plunker可以提供這些結果。 –

+0

@jbrown「你正在將vm.selectedStage傳遞給你的模式.close()爲什麼不在.result中處理它.then()「:我這樣做,如果你從父控制器打開模式時看到我的代碼,UI路由器的挑戰是Modal的父範圍設置爲rootScope,所以$ scope。$ emit沒有被捕獲ParentController。我嘗試使用$ scope:scope在打開的選項。但它不工作。我會嘗試添加一個plunker –

回答

0

最簡單的方法是將數據傳回作爲狀態參數從模態到父狀態,所以你可能會設置你的父母狀態,如:

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

然後當你通過所選項目進行模態截至收盤方法的參數,你可以設置數據在參數中以回到父母狀態:

.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版本還有很多值得探索的功能。而且我認爲你誤解$state上的reload方法。當您在$state.go(stateName, params, options)的選項塊中傳遞reload屬性時,與在模態關閉事件中一樣,reload的值應該爲true或false。如果您打電話給$state.reload(stateName),那就是您將狀態名稱作爲字符串傳遞的位置。 See the docs for more details