Skip to content

Commit 160ff40

Browse files
hpyourdkmaster
authored andcommitted
[优化]tab wrapper 添加 editableChange的监听
1 parent 8668855 commit 160ff40

File tree

5 files changed

+58
-17
lines changed

5 files changed

+58
-17
lines changed

src/app/demo/editable-box/custom-scene-layout/demo.component.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
(valueChange)="changeData($event)">
1111
</jigsaw-select>
1212
<button (click)="parseData(data)">parse data</button>
13+
<button (click)="editable = !editable">toggle editable</button>
1314
<j-editable-box [(data)]="data"
1415
(fill)="handleFill($event)"
1516
(fillTabs)="handleFillTabs($event)"
1617
(resizeStart)="handleResizeStart($event)"
1718
(resize)="handleResize($event)"
1819
(add)="handleAddAndRemove()"
1920
(remove)="handleAddAndRemove()"
21+
[editable]="editable"
22+
[showTabBar]="true"
2023
resizeLineWidth="4"
2124
height="400"></j-editable-box>
2225
<br>
@@ -27,7 +30,7 @@
2730
<br>
2831
<br>
2932
Parse Area:
30-
<j-editable-box [(data)]="data3" [editable]="false" height="400"></j-editable-box>
33+
<j-editable-box [(data)]="data3" [editable]="editable" height="400" [showTabBar]="true"></j-editable-box>
3134

3235
<ng-template #dialog>
3336
<jigsaw-dialog width="40%" (close)="onAnswer()">

src/app/demo/editable-box/custom-scene-layout/demo.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,8 @@ export class CustomSceneLayoutDemoComponent {
266266
box.addContent([tabsWrapperMetadata]);
267267
}
268268

269+
editable: boolean = true;
270+
269271
getModalOptions(): PopupOptions {
270272
return {
271273
modal: true, //是否模态

src/jigsaw/component/box/editable-box.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
[(grow)]="itemData.grow"
99
[shrink]="itemData.shrink"
1010
[editable]="editable"
11+
[showTabBar]="showTabBar"
1112
[_isFirst]="isFirst"
1213
[resizeLineWidth]="resizeLineWidth"
1314
[parent]="this"
@@ -25,7 +26,7 @@
2526
[class.jigsaw-editable-box-has-content]="data?.components?.length">
2627
<span class="fa fa-minus-square-o" (click)="_$addBox('v')"></span>
2728
<span class="fa fa-columns" (click)="_$addBox('h')"></span>
28-
<span class="fa fa fa-clone" (click)="_$addTabsWrapper()"></span>
29+
<span *ngIf="showTabBar" class="fa fa fa-clone" (click)="_$addTabsWrapper()"></span>
2930
<span class="fa fa-trash-o" (click)="_$remove()"></span>
3031
</div>
3132

src/jigsaw/component/box/editable-box.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,23 @@ export class JigsawEditableBox extends JigsawResizableBoxBase implements AfterVi
5757
});
5858
}
5959

60+
private _editable: boolean = true;
61+
6062
@Input()
61-
public editable: boolean = true;
63+
public get editable(): boolean {
64+
return this._editable;
65+
}
66+
67+
public set editable(value: boolean) {
68+
if(this.editable == value) return;
69+
this._editable = value;
70+
if(!this.parent) {
71+
this.editableChange.emit(value);
72+
}
73+
}
74+
75+
@Output()
76+
public editableChange = new EventEmitter<boolean>();
6277

6378
public blocked: boolean;
6479

@@ -73,6 +88,9 @@ export class JigsawEditableBox extends JigsawResizableBoxBase implements AfterVi
7388
@Input()
7489
public parent: JigsawEditableBox;
7590

91+
@Input()
92+
public showTabBar: boolean;
93+
7694
private _resizeLineWidth: string;
7795

7896
@Input()

src/jigsaw/component/box/tabs-wrapper/tabs-wrapper.ts

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ export class JigsawTabsWrapper implements AfterViewInit {
108108
componentRef.instance[input.property] = input.default;
109109
})
110110
}
111+
// 监听tab里面box的fill/fillTabs事件
112+
this._listenEvents(componentRef);
111113
}
112114

113115
private _renderTabByMetaData() {
@@ -132,17 +134,27 @@ export class JigsawTabsWrapper implements AfterViewInit {
132134
if (!pane.content || !pane.content.length) return;
133135
const contentMetaData = pane.content[0];
134136
if (contentMetaData.selector != 'j-editable-box') return;
135-
contentMetaData.inputs.unshift({ // 放在data属性的前面,data会调用box渲染内容的函数,需要在渲染前准备好其他属性
137+
// 放在data属性的前面,data会调用box渲染内容的函数,需要在渲染前准备好其他属性
138+
contentMetaData.inputs.unshift({
136139
property: 'editable',
137140
default: this._$editable
138-
})
141+
},{
142+
property: 'showTabBar',
143+
default: this._box.showTabBar
144+
});
139145
});
140146
}
141147

142148
private _addDefaultTab() {
143149
const componentMetaData = {
144150
selector: 'j-editable-box',
145-
component: JigsawEditableBox
151+
component: JigsawEditableBox,
152+
inputs: [
153+
{
154+
property: 'showTabBar',
155+
default: this._box.showTabBar
156+
}
157+
]
146158
};
147159
this.addTab(componentMetaData);
148160

@@ -151,18 +163,23 @@ export class JigsawTabsWrapper implements AfterViewInit {
151163
title: 'New Tab',
152164
content: [componentMetaData]
153165
});
166+
}
154167

155-
// 监听tab里面box的fill/fillTabs事件
156-
const insertComponent = this._tabs._tabContents.last._tabItemRef;
157-
if (insertComponent instanceof ComponentRef &&
158-
insertComponent.instance instanceof JigsawEditableBox) {
159-
insertComponent.instance.fill.subscribe(box => {
160-
this._box.getRootBox().fill.emit(box);
161-
});
162-
insertComponent.instance.fillTabs.subscribe(box => {
163-
this._box.getRootBox().fillTabs.emit(box);
164-
})
165-
}
168+
private _listenEvents(insertComponent) {
169+
if (!(insertComponent instanceof ComponentRef) ||
170+
!(insertComponent.instance instanceof JigsawEditableBox)) return;
171+
172+
insertComponent.instance.fill.subscribe(box => {
173+
this._box.getRootBox().fill.emit(box);
174+
});
175+
insertComponent.instance.fillTabs.subscribe(box => {
176+
this._box.getRootBox().fillTabs.emit(box);
177+
});
178+
this._box.getRootBox().editableChange.subscribe(editable => {
179+
if(insertComponent.instance instanceof JigsawEditableBox) {
180+
insertComponent.instance.editable = editable;
181+
}
182+
})
166183
}
167184

168185
ngAfterViewInit() {

0 commit comments

Comments
 (0)