角度访问模态父控制器

时间:2014-09-19 22:44:07

标签: angularjs scope modal-dialog angular-ui-router

我正在使用带有$ modal的ui-router,我的设置在我的路由页面中是这样的:

.state('resourcesControl.resource.dataStuff', {
        url: "/:resourceId/dataStuff",
        onEnter: ['$stateParams', '$state', '$modal', '$timeout', 'resourceService', function($stateParams, $state, $modal, $timeout, resourceService){

            var modalInst = $modal.open({
                templateUrl: "templates/dataStuff.html",
                windowClass: 'data-modal',
                controller: 'dataStuffCtrl'
            });

            modalInst.result.then(function(){

            }, function(){
                $state.go('resourcesControl.resource');
            });
        }]
    })

我对UI路由器的理解是所有子状态都可以访问其父控制器和范围变量。从理论上讲,我的dataStuffCtrl应该可以访问资源和resourcesControl控制器及其范围。

但是,当我在dataStuff视图中的父作用域项周围包装大括号时,不会呈现任何内容。有没有解决的办法?我记得看到其他人发布了有关$ modal的父控制器,但我无法在SO atm找到它们。

1 个答案:

答案 0 :(得分:1)

问题是$ modal服务将元素添加到文档的末尾。因此它不在您的范围层次结构中,而只是$ rootScope的子项。你有几个选择。

  1. 通过$ rootScope或广播/发送事件(凌乱)将数据传递给模态控制器
  2. 通过scope属性手动将模式作为modal.open选项对象的一部分用于范围。 (您可以调用$scope.$new()手动创建子范围)。
  3. 使用modal.open选项对象的resolve属性传递要注入模态控制器的数据,就像angular route resolves一样