You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 1 година
12345678910111213141516171819202122232425262728293031323334353637
  1. /**
  2. * openType 属性可选值为 navigateTo、redirectTo、switchTab、navigateBack、reLaunch
  3. */
  4. const NATIVE_ROUTES = [
  5. 'navigateTo',
  6. 'redirectTo',
  7. 'switchTab',
  8. 'navigateBack',
  9. 'reLaunch',
  10. ]
  11. export default function withNativeRoutes(props, vm) {
  12. const { url, openType = 'navigateTo', delta = 1 } = props
  13. const promisify = (method, params) => {
  14. return new Promise((resolve, reject) => {
  15. wx[method].call(wx, {
  16. ...params,
  17. success: resolve,
  18. fail: reject,
  19. })
  20. })
  21. }
  22. if (!url) {
  23. return Promise.reject(
  24. `Invalid value of prop "url" of "${vm.is}": Expected an Non-empty String.`
  25. )
  26. } else if (!NATIVE_ROUTES.includes(openType)) {
  27. return Promise.reject(
  28. `Invalid value of prop "openType" of "${vm.is}": expected "${NATIVE_ROUTES.join(',')}", ` +
  29. `but got ${openType}.`
  30. )
  31. } else if (openType === 'navigateBack') {
  32. return promisify(openType, { delta })
  33. } else {
  34. return promisify(openType, { url })
  35. }
  36. }