【问题标题】:How to use angular-google-maps <markers> directive?如何使用 angular-google-maps <markers> 指令?
【发布时间】:2014-03-27 19:23:44
【问题描述】:

我在 my project 中使用 angular-google-maps。

我正在尝试使用以下定义的对象添加多个标记:

vehicles = [
{
    stuff: "stuff",
    last_known_location: {
        latitude: number,
        longitude: number
    }
    
},
{
    stuff: "stuff",
    last_known_location: {
        latitude: number,
        longitude: number
    }
    
},//...etc
]

我的指令看起来像:

<markers models='vehicles'
         coords='vehicles.last_known_location' >
</markers>

Vehicles 是一个如上所述的对象数组。

这不起作用。如果我将模型更改为仅具有纬度和经度属性并完全丢失last_known_location 属性并更改我的指令coords='self',那么它可以正常工作。我需要做什么才能让这个与我的 json 结构一起工作?

【问题讨论】:

    标签: javascript angularjs google-maps


    【解决方案1】:

    如您所见,此处声明:http://angular-ui.github.io/angular-google-maps/#!/api/markers 属性 coords 的值必须在引号之间。

    另外,在 v1.1 中,对于每个标记您需要定义一个 id(id 属性的名称由 idKey),默认为model.id,

    所以,在你的情况下,为了它现在可以工作,它必须是

    <markers models="vehicles" coords="'last_known_location'"></markers>
    

    还有车辆数组,例如:

    $scope.vehicles = [{
      id: "first",
      stuff: "stuff",
      last_known_location: {
          latitude: 37.3694868,
          longitude: -5.9803275
      }
    }];
    

    (注意 id 属性)

    【讨论】:

    • 太棒了,这对我有帮助,他们的文档不是 100% 清楚,我可能会去为这个 github 做贡献,它对我帮助很大
    【解决方案2】:

    我认为在您为模型定义数组之后,您不需要再次定义数组。你可以试试:

    <markers models='vehicles' coords='last_known_location'>  </markers>
    

    如果您在 last_known_location 和父对象中没有它们,API 说您可以使用 'self' 来识别包含 lat 和 lng 的对象

    【讨论】:

    • 无法从坐标中移除车辆。通过将 lat 和 lon 放在父对象中确实可以工作,我不想这样做。
    • 如何使用 coords='self.last_known_location'
    • K,我很难过。唯一的另一种方法是通过进入指令文件和控制台进行调试。记录发生了什么。抱歉帮不上忙
    • 您的标记语法最终是正确的,但问题是属性“last_known_location”实际上需要用引号括起来。
    • 有趣,想知道键中的下划线是否以某种方式干扰了 AngularJS 解析事物的方式......很高兴你让它工作了。
    【解决方案3】:

    两件事:

    首先,将[] 添加到last_known_location 的定义中,以使其成为对象数组。在 Angular Google Maps 的这个测试页面中,没有它,坐标就无法工作。 http://www.directiv.es/angular-google-maps

    其次,确保您的模块可以访问vehicles。最好的方法是让它成为$scope 的一部分。

    angular.extend($scope, 
    {
        vehicles:
            stuff = "stuff",
            last_known_location:  [{
              latitude: 45,
              longitude: -74
            }]
      });
    

    然后@jOshT 的响应中的标记将起作用:

    <marker models='vehicles' coords='last_known_location'>  </markers>
    

    更新

    每个 cmets,我误解了这个实现使用 markers 而不是 marker。前者要求coords 对象为string,后者要求expression。使用原始代码序列化last_known_location 将起作用。

    【讨论】:

    • 另外,车辆在控制器中是可见的,如果我放弃 last_known_location 属性,我可以让它工作。
    • 请仔细查看我回答中的对象定义。 last_known_location 需要是一个包含对象的数组。
    • 您的回答对于我正在尝试做的事情不正确。该链接上的代码示例不是我想要做的。来自文档:“坐标:包含标记坐标的属性名称。必须指向具有纬度和经度属性的对象。”我正在尝试使用标记指令angular-google-maps.org/api#markers
    • 该页面还指出,与 marker 元素不同,markers coords 是字符串,而不是表达式。尝试序列化您的last_known_location
    • 不,它现在正在工作,但使用我的原始代码并序列化 last_known_location
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多