2

Vue 中的类型检查需要将构造函数作为类型传入:

props: {
  coords: {
    type: Coordinates,
    required: true,
  },
},

我不知道如何找到Coordinates构造函数。不能使用Object,因为它不继承任何东西,并且不希望只允许任何东西。

MDN 上没有关于如何直接访问它的信息:https ://developer.mozilla.org/en-US/docs/Web/API/Coordinates

有任何想法吗?

编辑:澄清一下,window.Coordinates是未定义的。上面的代码示例不起作用。

4

3 回答 3

2

Coordinates不是在浏览器中公开以供 Web 开发人员使用的东西它是 W3C 地理规范为实现地理定位功能的浏览器供应商定义的接口。接口描述了某种类型的数据结构的外观。例如,coords在以下示例中:

navigator.geolocation.getCurrentPosition(function (pos) {
  var coords = pos.coords
  console.log(coords)
})

即使您可以Coordinates使用以下代码检索 of 的文字。它只是一个对象(是的,它是原型,而不是构造函数),你几乎不能做任何事情。

Object.getPrototypeOf(pos.coords)

所以这里有两点:

  1. Coordinates不适合 Web 开发人员。
  2. Coordinates甚至不是一个函数。

我猜唯一的方法是定义您自己的验证器并检查输入值是否满足您的要求。这会更容易,因为Coordinates有一个特殊的toString()符号:

props: {
  coords: {
    validator: function (value) {
      return value.toString() === '[object Coordinates]'
    }
  }
}

但是,如果您手工制作自己的坐标数据,此验证器可能会失败。一种更通用的方法就像鸭子打字一样,只需检查它是否具有您需要的适当属性,latitude通常longitude情况下。

于 2017-01-23T08:08:58.767 回答
0

您需要使用自定义验证器检查该值是否是您的构造函数的实例:

coords {
  validator: function (value) {
      return value instanceOf Coordinates; // Coordinates is a constructor in your case
  }
}

查看HTML5 地理定位文档。

于 2016-10-31T14:57:44.967 回答
0

我也在处理这个问题。我的解决方案是定义一个假构造函数

function Coordinates () {}
Coordinates.prototype = Object.prototype

在 vue 组件中

props: {
  coords: {
    type: Coordinates
  }
}

这将起作用,因为 Vue 用于instanceof验证自定义类型。

于 2017-01-23T06:33:26.457 回答