2017-10-13 38 views
0

我有一个子控制器,我可以在一些主控制器内部使用。例如,它是主页面控制器内的面板。现在我需要在里面打开一个带有子控制器的子窗口。 我该怎么做AngularJS(1.5)分离面板到子窗口,反之亦然

例如,我有一个视频播放器面板,我希望它变得可拆卸和可扩展的大小。

我的孩子控制器都有自己的模板文件,我就与此注入到主控制器:

... 
<div class="col-sm-6 col-md-6"> 
    <span ng-include="AVTemplateUrl" ng-controller="VideoCtrl as AV" data-ng-init="AV.init()"></span> 
</div> 
... 

和构造器为孩子:

angular.module('myApp.video', ['ngRoute']) 
.controller('VideoCtrl', ['$scope', ...], 
    function ($scope, ...) { 
     $scope.AVTemplateUrl = 'view/device/video.html'; 
     let AV = $scope.AV = { ... } 
... 

附:对不起我的英语不好。

+0

这是角度还是angularjs相关? –

+0

@ jota-toledo,它的 '“依赖关系”:{ “angular”:“^ 1.5.7”...' – iiiyx

回答

0

发现这里的溶液https://stackoverflow.com/a/17066146/2982280和这里http://embed.plnkr.co/dz1A1h/

父控制器:

.controller(
    ... 
    let model = $scope.model = { 
     detach() { 
      // remove the controller panel from dom 
     }, 
     maximize() { 
      // detach panel to a new child window 
      this.detach(); 
      window.$windowScope = $scope; // $scope contains 'model' field 
      $window.open('_child_window_url_', '_child_window_name_', 'menubar=no,location=no,resizable=yes,scrollbars=no,status=no - window params'); 
     }, 
     onClick() { 
      // some DOM handler - button click, for example 
     }, 
     ... 
    }; 
    ... 
); 

儿童控制器:

1)使用路由器:

.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('_child_window_url_', { 
     templateUrl: '_template_file_path_', 
     controller: '_child_controller_name_' 
    }); 
}]) 

2)执行DOM处理程序让他们打电话给家长' s处理程序:

onClick: function() { 
    window.opener.$windowScope.model.onClick(); 
},