提交 2958ea43 编写于 作者: inkwalk's avatar inkwalk

fixed: three losed context apis that dependence ui

上级 dff5003d
const WINDOW_NAMES = ['VUniLeftWindow', 'VUniTopWindow', 'VUniRightWindow']
export function checkInWindows (vm) {
if (__PLATFORM__ !== 'h5') {
return false
}
while (vm) {
if (WINDOW_NAMES.indexOf(vm.$options.name) !== -1) {
return true
}
vm = vm.$parent
}
}
import createCallbacks from 'uni-helpers/callbacks' import createCallbacks from 'uni-helpers/callbacks'
import {
checkInWindows
} from 'uni-helpers/windows'
import { import {
getCurrentPageVm getCurrentPageVm
} from '../../platform' } from '../../platform'
...@@ -14,7 +16,7 @@ const defaultOptions = { ...@@ -14,7 +16,7 @@ const defaultOptions = {
class ServiceIntersectionObserver { class ServiceIntersectionObserver {
constructor (component, options) { constructor (component, options) {
this.pageId = component.$page.id this.pageId = component.$page && component.$page.id
this.component = component._$id || component // app-plus 平台传输_$id this.component = component._$id || component // app-plus 平台传输_$id
this.options = Object.assign({}, defaultOptions, options) this.options = Object.assign({}, defaultOptions, options)
} }
...@@ -48,13 +50,13 @@ class ServiceIntersectionObserver { ...@@ -48,13 +50,13 @@ class ServiceIntersectionObserver {
reqId: this.reqId, reqId: this.reqId,
component: this.component, component: this.component,
options: this.options options: this.options
}, this.pageId) }, checkInWindows(this.component) ? this.component : this.pageId)
} }
disconnect () { disconnect () {
UniServiceJSBridge.publishHandler('destroyComponentObserver', { UniServiceJSBridge.publishHandler('destroyComponentObserver', {
reqId: this.reqId reqId: this.reqId
}, this.pageId) }, checkInWindows(this.component) ? this.component : this.pageId)
} }
} }
......
import createCallbacks from 'uni-helpers/callbacks' import createCallbacks from 'uni-helpers/callbacks'
import { import {
getCurrentPageVm getCurrentPageVm
} from '../../platform' } from '../../platform'
...@@ -8,7 +7,7 @@ const createMediaQueryObserverCallbacks = createCallbacks('requestMediaQueryObse ...@@ -8,7 +7,7 @@ const createMediaQueryObserverCallbacks = createCallbacks('requestMediaQueryObse
class ServiceMediaQueryObserver { class ServiceMediaQueryObserver {
constructor (component, options) { constructor (component, options) {
this.pageId = component.$page.id this.pageId = component.$page && component.$page.id
this.component = component._$id || component // app-plus 平台传输_$id this.component = component._$id || component // app-plus 平台传输_$id
this.options = options this.options = options
} }
...@@ -25,13 +24,13 @@ class ServiceMediaQueryObserver { ...@@ -25,13 +24,13 @@ class ServiceMediaQueryObserver {
reqId: this.reqId, reqId: this.reqId,
component: this.component, component: this.component,
options: this.options options: this.options
}, this.pageId) })
} }
disconnect () { disconnect () {
UniServiceJSBridge.publishHandler('destroyMediaQueryObserver', { UniServiceJSBridge.publishHandler('destroyMediaQueryObserver', {
reqId: this.reqId reqId: this.reqId
}, this.pageId) })
} }
} }
......
...@@ -124,16 +124,17 @@ export function requestComponentInfo ({ ...@@ -124,16 +124,17 @@ export function requestComponentInfo ({
reqId, reqId,
reqs reqs
}, pageId) { }, pageId) {
let pageVm
if (pageId._isVue) {
pageVm = pageId
} else {
const pages = getCurrentPages() // 跨平台时,View 层也应该实现该方法,举例 App 上,View 层的 getCurrentPages 返回长度为1的当前页面数组 const pages = getCurrentPages() // 跨平台时,View 层也应该实现该方法,举例 App 上,View 层的 getCurrentPages 返回长度为1的当前页面数组
const page = pages.find(page => page.$page.id === pageId) const page = pages.find(page => page.$page.id === pageId)
if (!page) { if (!page) {
throw new Error(`Not Found:Page[${pageId}]`) throw new Error(`Not Found:Page[${pageId}]`)
} }
pageVm = page.$vm
const pageVm = page.$vm }
const result = [] const result = []
reqs.forEach(function ({ reqs.forEach(function ({
component, component,
...@@ -151,5 +152,5 @@ export function requestComponentInfo ({ ...@@ -151,5 +152,5 @@ export function requestComponentInfo ({
UniViewJSBridge.publishHandler('onRequestComponentInfo', { UniViewJSBridge.publishHandler('onRequestComponentInfo', {
reqId, reqId,
res: result res: result
}, pageId) })
} }
...@@ -26,20 +26,19 @@ export function requestComponentObserver ({ ...@@ -26,20 +26,19 @@ export function requestComponentObserver ({
component, component,
options options
}, pageId) { }, pageId) {
const pages = getCurrentPages() let pageVm
if (pageId._isVue) {
pageVm = pageId
} else {
const pages = getCurrentPages() // 跨平台时,View 层也应该实现该方法,举例 App 上,View 层的 getCurrentPages 返回长度为1的当前页面数组
const page = pages.find(page => page.$page.id === pageId) const page = pages.find(page => page.$page.id === pageId)
if (!page) { if (!page) {
throw new Error(`Not Found:Page[${pageId}]`) throw new Error(`Not Found:Page[${pageId}]`)
} }
pageVm = page.$vm
const pageVm = page.$vm }
const $el = findElm(component, pageVm) const $el = findElm(component, pageVm)
const root = options.relativeToSelector ? $el.querySelector(options.relativeToSelector) : null const root = options.relativeToSelector ? $el.querySelector(options.relativeToSelector) : null
const intersectionObserver = intersectionObservers[reqId] = new IntersectionObserver((entries, observer) => { const intersectionObserver = intersectionObservers[reqId] = new IntersectionObserver((entries, observer) => {
entries.forEach(entrie => { entries.forEach(entrie => {
UniViewJSBridge.publishHandler('onRequestComponentObserver', { UniViewJSBridge.publishHandler('onRequestComponentObserver', {
...@@ -53,7 +52,7 @@ export function requestComponentObserver ({ ...@@ -53,7 +52,7 @@ export function requestComponentObserver ({
dataset: normalizeDataset(entrie.target.dataset || {}), dataset: normalizeDataset(entrie.target.dataset || {}),
id: entrie.target.id id: entrie.target.id
} }
}, pageVm.$page.id) })
}) })
}, { }, {
root, root,
...@@ -63,11 +62,20 @@ export function requestComponentObserver ({ ...@@ -63,11 +62,20 @@ export function requestComponentObserver ({
if (options.observeAll) { if (options.observeAll) {
intersectionObserver.USE_MUTATION_OBSERVER = true intersectionObserver.USE_MUTATION_OBSERVER = true
Array.prototype.map.call($el.querySelectorAll(options.selector), el => { Array.prototype.map.call($el.querySelectorAll(options.selector), el => {
if (!el) {
console.warn(`Node ${options.selector} is not found. Intersection observer will not trigger.`)
return
}
intersectionObserver.observe(el) intersectionObserver.observe(el)
}) })
} else { } else {
intersectionObserver.USE_MUTATION_OBSERVER = false intersectionObserver.USE_MUTATION_OBSERVER = false
intersectionObserver.observe($el.querySelector(options.selector)) const el = $el.querySelector(options.selector)
if (!el) {
console.warn(`Node ${options.selector} is not found. Intersection observer will not trigger.`)
return
}
intersectionObserver.observe(el)
} }
} }
......
...@@ -34,15 +34,6 @@ export function requestMediaQueryObserver ({ ...@@ -34,15 +34,6 @@ export function requestMediaQueryObserver ({
reqId, reqId,
options options
}, pageId) { }, pageId) {
const pages = getCurrentPages()
const page = pages.find(page => page.$page.id === pageId)
if (!page) {
throw new Error(`Not Found:Page[${pageId}]`)
}
// const pageVm = page.$vm
// 创建一个媒体查询对象 // 创建一个媒体查询对象
const mediaQueryObserver = mediaQueryObservers[reqId] = window.matchMedia(handleMediaQueryStr(options)) const mediaQueryObserver = mediaQueryObservers[reqId] = window.matchMedia(handleMediaQueryStr(options))
...@@ -51,7 +42,7 @@ export function requestMediaQueryObserver ({ ...@@ -51,7 +42,7 @@ export function requestMediaQueryObserver ({
UniViewJSBridge.publishHandler('onRequestMediaQueryObserver', { UniViewJSBridge.publishHandler('onRequestMediaQueryObserver', {
reqId, reqId,
res: e.matches res: e.matches
}, pages[pages.length - 1].$page.id) })
} }
listener(mediaQueryObserver) // 监听前执行一次媒体查询 listener(mediaQueryObserver) // 监听前执行一次媒体查询
......
import createCallbacks from 'uni-helpers/callbacks' import createCallbacks from 'uni-helpers/callbacks'
import {
checkInWindows
} from 'uni-helpers/windows'
const requestComponentInfoCallbacks = createCallbacks('requestComponentInfo') const requestComponentInfoCallbacks = createCallbacks('requestComponentInfo')
...@@ -6,5 +9,5 @@ export function requestComponentInfo (pageVm, queue, callback) { ...@@ -6,5 +9,5 @@ export function requestComponentInfo (pageVm, queue, callback) {
UniServiceJSBridge.publishHandler('requestComponentInfo', { UniServiceJSBridge.publishHandler('requestComponentInfo', {
reqId: requestComponentInfoCallbacks.push(callback), reqId: requestComponentInfoCallbacks.push(callback),
reqs: queue reqs: queue
}, pageVm.$page.id) }, checkInWindows(pageVm) ? pageVm : pageVm.$page.id)
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册