mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-16 01:52:19 +08:00
@ -30,9 +30,17 @@ export class AngularDelegate {
|
|||||||
create(
|
create(
|
||||||
resolverOrInjector: ComponentFactoryResolver,
|
resolverOrInjector: ComponentFactoryResolver,
|
||||||
injector: Injector,
|
injector: Injector,
|
||||||
location?: ViewContainerRef
|
location?: ViewContainerRef,
|
||||||
|
elementReferenceKey?: string
|
||||||
): AngularFrameworkDelegate {
|
): AngularFrameworkDelegate {
|
||||||
return new AngularFrameworkDelegate(resolverOrInjector, injector, location, this.appRef, this.zone);
|
return new AngularFrameworkDelegate(
|
||||||
|
resolverOrInjector,
|
||||||
|
injector,
|
||||||
|
location,
|
||||||
|
this.appRef,
|
||||||
|
this.zone,
|
||||||
|
elementReferenceKey
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,12 +53,29 @@ export class AngularFrameworkDelegate implements FrameworkDelegate {
|
|||||||
private injector: Injector,
|
private injector: Injector,
|
||||||
private location: ViewContainerRef | undefined,
|
private location: ViewContainerRef | undefined,
|
||||||
private appRef: ApplicationRef,
|
private appRef: ApplicationRef,
|
||||||
private zone: NgZone
|
private zone: NgZone,
|
||||||
|
private elementReferenceKey?: string
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
attachViewToDom(container: any, component: any, params?: any, cssClasses?: string[]): Promise<any> {
|
attachViewToDom(container: any, component: any, params?: any, cssClasses?: string[]): Promise<any> {
|
||||||
return this.zone.run(() => {
|
return this.zone.run(() => {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
|
const componentProps = {
|
||||||
|
...params,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ionic Angular passes a reference to a modal
|
||||||
|
* or popover that can be accessed using a
|
||||||
|
* variable in the overlay component. If
|
||||||
|
* elementReferenceKey is defined, then we should
|
||||||
|
* pass a reference to the component using
|
||||||
|
* elementReferenceKey as the key.
|
||||||
|
*/
|
||||||
|
if (this.elementReferenceKey !== undefined) {
|
||||||
|
componentProps[this.elementReferenceKey] = container;
|
||||||
|
}
|
||||||
|
|
||||||
const el = attachView(
|
const el = attachView(
|
||||||
this.zone,
|
this.zone,
|
||||||
this.resolverOrInjector,
|
this.resolverOrInjector,
|
||||||
@ -61,7 +86,7 @@ export class AngularFrameworkDelegate implements FrameworkDelegate {
|
|||||||
this.elEventsMap,
|
this.elEventsMap,
|
||||||
container,
|
container,
|
||||||
component,
|
component,
|
||||||
params,
|
componentProps,
|
||||||
cssClasses
|
cssClasses
|
||||||
);
|
);
|
||||||
resolve(el);
|
resolve(el);
|
||||||
|
@ -21,7 +21,12 @@ export class ModalController extends OverlayBaseController<ModalOptions, HTMLIon
|
|||||||
create(opts: ModalOptions): Promise<HTMLIonModalElement> {
|
create(opts: ModalOptions): Promise<HTMLIonModalElement> {
|
||||||
return super.create({
|
return super.create({
|
||||||
...opts,
|
...opts,
|
||||||
delegate: this.angularDelegate.create(this.resolver ?? this.environmentInjector, this.injector),
|
delegate: this.angularDelegate.create(
|
||||||
|
this.resolver ?? this.environmentInjector,
|
||||||
|
this.injector,
|
||||||
|
undefined,
|
||||||
|
'modal'
|
||||||
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,12 @@ export class PopoverController extends OverlayBaseController<PopoverOptions, HTM
|
|||||||
create(opts: PopoverOptions): Promise<HTMLIonPopoverElement> {
|
create(opts: PopoverOptions): Promise<HTMLIonPopoverElement> {
|
||||||
return super.create({
|
return super.create({
|
||||||
...opts,
|
...opts,
|
||||||
delegate: this.angularDelegate.create(this.resolver ?? this.environmentInjector, this.injector),
|
delegate: this.angularDelegate.create(
|
||||||
|
this.resolver ?? this.environmentInjector,
|
||||||
|
this.injector,
|
||||||
|
undefined,
|
||||||
|
'popover'
|
||||||
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -512,13 +512,15 @@ export class Modal implements ComponentInterface, OverlayInterface {
|
|||||||
*/
|
*/
|
||||||
this.currentBreakpoint = this.initialBreakpoint;
|
this.currentBreakpoint = this.initialBreakpoint;
|
||||||
|
|
||||||
const data = {
|
|
||||||
...this.componentProps,
|
|
||||||
modal: this.el,
|
|
||||||
};
|
|
||||||
|
|
||||||
const { inline, delegate } = this.getDelegate(true);
|
const { inline, delegate } = this.getDelegate(true);
|
||||||
this.usersElement = await attachComponent(delegate, this.el, this.component, ['ion-page'], data, inline);
|
this.usersElement = await attachComponent(
|
||||||
|
delegate,
|
||||||
|
this.el,
|
||||||
|
this.component,
|
||||||
|
['ion-page'],
|
||||||
|
this.componentProps,
|
||||||
|
inline
|
||||||
|
);
|
||||||
|
|
||||||
await deepReady(this.usersElement);
|
await deepReady(this.usersElement);
|
||||||
|
|
||||||
|
@ -448,13 +448,15 @@ export class Popover implements ComponentInterface, PopoverInterface {
|
|||||||
await this.currentTransition;
|
await this.currentTransition;
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = {
|
|
||||||
...this.componentProps,
|
|
||||||
popover: this.el,
|
|
||||||
};
|
|
||||||
|
|
||||||
const { inline, delegate } = this.getDelegate(true);
|
const { inline, delegate } = this.getDelegate(true);
|
||||||
this.usersElement = await attachComponent(delegate, this.el, this.component, ['popover-viewport'], data, inline);
|
this.usersElement = await attachComponent(
|
||||||
|
delegate,
|
||||||
|
this.el,
|
||||||
|
this.component,
|
||||||
|
['popover-viewport'],
|
||||||
|
this.componentProps,
|
||||||
|
inline
|
||||||
|
);
|
||||||
await deepReady(this.usersElement);
|
await deepReady(this.usersElement);
|
||||||
|
|
||||||
if (!this.keyboardEvents) {
|
if (!this.keyboardEvents) {
|
||||||
|
@ -21,15 +21,6 @@ export const VueDelegate = (
|
|||||||
componentProps: any = {},
|
componentProps: any = {},
|
||||||
classes?: string[]
|
classes?: string[]
|
||||||
) => {
|
) => {
|
||||||
/**
|
|
||||||
* Ionic Framework passes in modal and popover element
|
|
||||||
* refs as props, but if these are not defined
|
|
||||||
* on the Vue component instance as props, Vue will
|
|
||||||
* warn the user.
|
|
||||||
*/
|
|
||||||
delete componentProps["modal"];
|
|
||||||
delete componentProps["popover"];
|
|
||||||
|
|
||||||
const div = document.createElement("div");
|
const div = document.createElement("div");
|
||||||
classes && div.classList.add(...classes);
|
classes && div.classList.add(...classes);
|
||||||
parentElement.appendChild(div);
|
parentElement.appendChild(div);
|
||||||
|
Reference in New Issue
Block a user