从嵌套状态

时间:2015-04-26 21:14:08

标签: angularjs angular-ui-router

如何从另一个状态ctrl访问其他状态范围变量? 如果在' session.index.detail'状态,我想从rightPanel访问leftPanel范围变量Ctrl是否可能?我想要做的是我在rightPanel中有一个表单,当我单击save时,我想将新数据对象添加回leftPanel列表并在成功添加到数据库后刷新它。

.state('session', {

      abstract: true,
      templateUrl: '/schedule/_session.html'
    })
    .state('session.index', {
      url: '/sessionmang',
      views: {
        'leftPanel@session': {
          controller: 'SessionCtrl',
          controllerAs: 'vm',
          templateUrl: '/schedule/_sessionPanel.html'
        },
        'rightPanel@session': {
          templateUrl: '/schedule/_sessionDetailPanel.html'
        }
      }
    })
    .state('session.index.detail', {
      params: {
        sessionObj: null,
        sessionTypeObj: null
      },
      views: {
        'rightPanel@session': {
          controller: 'SessionDetailCtrl',
          controllerAs: 'vm',
          templateUrl: '/schedule/_sessionDetailPanel.html',
          resolve: {
            sessionObj: ['$stateParams', function ($stateParams) {
              return $stateParams.sessionObj;
            }],
            sessionTypeObj: ['$stateParams', function ($stateParams) {
              return $stateParams.sessionTypeObj;
            }]
          }
        }
      }
    });

2 个答案:

答案 0 :(得分:3)

我认为最好的方法是创建一个包含您想要共享的数据的服务。

并在控制器之间共享。 或者使用广播在控制器之间进行通话,并通过这种方式传递数据

答案 1 :(得分:0)

最简单的方法是,你可以使用这样的事件。

单击“保存”时,您将执行此操作 $scope.$broadcast('myevent', data); 从rightCtrl和leftCtrl你可以做

$scope.$on('myevent', function(event,data) {
   //do your updates here
})