# angular5-golden-layout
**Repository Path**: cczeng/angular5-golden-layout
## Basic Information
- **Project Name**: angular5-golden-layout
- **Description**: No description available
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-03-01
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Golden-layout in Angular5
这是一个使用Angular2+开发的DEMO,这个项目中引入:
- [Angular Meterial](https://material.angular.io/)
- [GoldenLayout](http://golden-layout.com/)
**目录**
1. [引入Golden-layout](#improt)
2. [BUG](#bug)
1. ~~添加不了没注册的组件,只能添加已经注册过的组件~~
### 引入 Golden-layout
index.html:
```javascript
```
Modules.ts:
```javascript
import { MapboxComponent } from './mapbox/mapbox.component';
import { GroupComponent } from './group/group.component';
import { UsersComponent } from './users/users.component';
@NgModule({
...
declarations: [
GroupComponent,
MapboxComponent,
UsersComponent,
],
entryComponents: [
GroupComponent,
MapboxComponent,
UsersComponent
]
})
```
Home.component.ts:
```javascript
import { Component, OnInit, ViewContainerRef, OnDestroy, ElementRef, ComponentRef, ComponentFactoryResolver } from '@angular/core';
import { MapboxComponent } from './mapbox/mapbox.component';
import { GroupComponent } from './group/group.component';
import { UsersComponent } from './users/users.component';
declare var GoldenLayout: any;
declare var $: any;
export class HomeComponent implements OnInit {
private config: any;
private layout: any;
constructor(
private el: ElementRef,
private viewContainer: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver
) {
this.config = {
settings: {
selectionEnabled: true
},
content: [{
type: 'row',
content: [{
type: 'component',
componentName: 'group',
componentState: {
message: 'Top Left',
label: 'Group'
}
}, {
type: 'column',
content: [{
type: 'component',
componentName: 'mapbox',
componentState: {
message: 'Top Right',
label: 'Map'
}
}, {
type: 'component',
componentName: 'mapbox',
componentState: {
message: 'Bottom Right',
label: 'Map'
}
}]
}]
}]
};
}
ngOnInit() {
this.layout = new GoldenLayout(this.config, $(this.el.nativeElement).find("#layout"));
// 注册到golden-layout
this.layout.registerComponent('group', (container, componentState) => {
let group = this.componentFactoryResolver.resolveComponentFactory(GroupComponent);
let groupRef = this.viewContainer.createComponent(group);
container.getElement().append($(groupRef.location.nativeElement));
});
// 注册到golden-layout
this.layout.registerComponent('mapbox', (container, componentState) => {
let mapbox = this.componentFactoryResolver.resolveComponentFactory(MapboxComponent);
let mapboxRef = this.viewContainer.createComponent(mapbox);
container.getElement().append($(mapboxRef.location.nativeElement));
});
this.layout.init();
}
}
```
### bug
1. ~~添加不了没注册的组件,只能添加已经注册过的组件~~
**解决:**
config 为空,生命周期钩子(ngOnInit)里面注册(registerComponent)即可
```javascript
this.config = {
settings: {
selectionEnabled: true
},
content: [{
type: 'row',
content: [{
type: 'component',
componentName: 'group',
componentState: {
message: 'Bottom Right',
label: 'group'
}
}]
}]
};
ngOnInit() {
this.layout = new GoldenLayout(this.config, $(this.el.nativeElement).find("#layout"));
this.layout.registerComponent('group', (container, componentState) => {
let group = this.componentFactoryResolver.resolveComponentFactory(GroupComponent);
let groupRef = this.viewContainer.createComponent(group);
container.getElement().append($(groupRef.location.nativeElement));
});
this.layout.registerComponent('mapbox', (container, componentState) => {
let mapbox = this.componentFactoryResolver.resolveComponentFactory(MapboxComponent);
let mapboxRef = this.viewContainer.createComponent(mapbox);
container.getElement().append($(mapboxRef.location.nativeElement));
});
this.layout.registerComponent('users', (container, componentState) => {
let users = this.componentFactoryResolver.resolveComponentFactory(UsersComponent);
let usersRef = this.viewContainer.createComponent(users);
container.getElement().append($(usersRef.location.nativeElement));
});
this.layout.init();
}
addLayout(com): void {
let newConfig = {
type: 'component',
componentName: com.name,
componentState: {
message: 'Bottom Right',
label: com.name
}
};
this.layout.root.contentItems[0].addChild(newConfig);
}
```
***这里首先把所有要的component注册一遍,在addLayout()里插入component视图.***