- {this.shouldRender ? (
+ {shouldRender.value ? (
- {this.$slots.default?.()}
- {this.closeable && (
-
- )}
+ {slots.default?.()}
+ {renderCloseIcon()}
) : null}
);
- },
+ };
- open() {
- /* istanbul ignore next */
- if (this.$isServer || this.opened) {
- return;
- }
-
- // cover default zIndex
- if (this.zIndex !== undefined) {
- context.zIndex = this.zIndex;
- }
-
- this.opened = true;
- this.renderOverlay();
- this.addLock();
- },
-
- addLock() {
- if (this.lockScroll) {
- on(document, 'touchstart', this.touchStart);
- on(document, 'touchmove', this.onTouchMove);
-
- if (!context.lockCount) {
- document.body.classList.add('van-overflow-hidden');
- }
- context.lockCount++;
- }
- },
-
- removeLock() {
- if (this.lockScroll && context.lockCount) {
- context.lockCount--;
- off(document, 'touchstart', this.touchStart);
- off(document, 'touchmove', this.onTouchMove);
-
- if (!context.lockCount) {
- document.body.classList.remove('van-overflow-hidden');
+ watch(
+ () => props.show,
+ (value) => {
+ if (value) {
+ state.inited = true;
+ open();
+ emit('open');
+ } else {
+ close();
+ emit('close');
}
}
- },
-
- close() {
- if (!this.opened) {
- return;
- }
-
- this.opened = false;
- this.removeLock();
- this.$emit('update:show', false);
- },
-
- onTouchMove(event) {
- this.touchMove(event);
- const direction = this.deltaY > 0 ? '10' : '01';
- const el = getScroller(event.target, this.$refs.root);
- const { scrollHeight, offsetHeight, scrollTop } = el;
- let status = '11';
-
- /* istanbul ignore next */
- if (scrollTop === 0) {
- status = offsetHeight >= scrollHeight ? '00' : '01';
- } else if (scrollTop + offsetHeight >= scrollHeight) {
- status = '10';
- }
-
- /* istanbul ignore next */
- if (
- status !== '11' &&
- this.direction === 'vertical' &&
- !(parseInt(status, 2) & parseInt(direction, 2))
- ) {
- preventDefault(event, true);
- }
- },
-
- onClickOverlay() {
- this.$emit('click-overlay');
-
- if (this.closeOnClickOverlay) {
- this.close();
- }
- },
-
- renderOverlay() {
- if (this.$isServer || !this.show) {
- return;
- }
-
- this.$nextTick(() => {
- this.updateZIndex(this.overlay ? 1 : 0);
- });
- },
-
- updateZIndex(value = 0) {
- this.currentZIndex = ++context.zIndex + value;
- },
- },
-
- render() {
- if (this.teleport) {
- return (
-