在传单弹出窗口中显示列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在传单弹出窗口中显示列表相关的知识,希望对你有一定的参考价值。

我想在传单弹出窗口中显示无序列表或表。项目数量及其内容不同,取决于所点击的元素类型。 理想情况下,应该在click事件上创建弹出内容。

我试图在bindPopup函数中构建列表,但它不起作用。

      L.marker([mapElement.y * -1, mapElement.x], {
      uniqueID: mapElement.elementID,
      mapIconWidth: mapElement.width,
      icon: new mapIcon({
        iconUrl: icon.mapIcon.imageData,
        iconSize: [elementSize, elementSize]
      })
    })
      .addTo(markers)
      .bindPopup(mapElement.element.nbr + ' ' + mapElement.element.name +  "<br/<ul>  <li v-for='state in mapElement.element.states'>{{ state.definition.stateTypeTitle }}</li> </ul>");

这是输出:

enter image description here

任何想法都会很棒!谢谢!


编辑的代码(获取此错误消息:您正在使用Vue的仅运行时版本,其中模板编译器不可用。要么将模板预编译为渲染函数,要么使用包含编译器的构建。):

LoadMarker(mapID) {
  console.log("Load Markers");
  map.removeLayer(markers);
  markers.clearLayers();

  fetch(this.$apiUrl + "/mapelements/" + mapID)
    .then(response => response.json())
    .then(received => {
      let mapElements = received;
      let mapZoom = map.getZoom();

      mapElements.forEach(function(mapElement) {
        let elementSize = (mapElement.width / 8) * mapZoom;


          let popup = new Vue({
          template:
            mapElement.element.nbr +
            " " +
            mapElement.element.name +
            "<br/<ul>  <li v-for='state in mapElement.element.states'>{{ state.definition.stateTypeTitle }}</li> </ul>",
          data: {
            mapElement
          }
        }).$mount().$el;


        let icon = mapIconSchemas.find(
          schema => schema.mapIconSchemaID == mapElement.mapIconSchemaID
        );
        if (icon != null) {
          L.marker([mapElement.y * -1, mapElement.x], {
            uniqueID: mapElement.elementID,
            mapIconWidth: mapElement.width,
            icon: new mapIcon({
              iconUrl: icon.mapIcon.imageData,
              iconSize: [elementSize, elementSize]
            })
          })
            .addTo(markers)
            .bindPopup(popup);
        }
      });
    });

  map.addLayer(markers);
},
答案

您不能在弹出窗口的html字符串中使用Vue模板语法。但是从文档中可以看出,.bindPopup方法也可以接受HTML元素。所以你要走的路是这样的:

首先创建弹出元素:

let popup = new Vue({
    template: mapElement.element.nbr + ' ' + mapElement.element.name +  "<br/<ul>  <li v-for='state in mapElement.element.states'>{{ state.definition.stateTypeTitle }}</li> </ul>",
    data: {
        mapElement
    }
}).$mount().$el

然后在.bindPopup方法中使用它:

/*...*/
.bindPopup(popup)
另一答案

如果您想使用vue模板引擎填充弹出内容,有一个解决方案。

我为这个question解释了它。

您可以使用要在弹出窗口中显示的内容创建一个组件,但是将其隐藏:

<my-popup-content v-show=False ref='foo'><my-popup-content>

然后,您可以在代码中访问该组件生成的html,如下所示:

const template = this.$refs.foo.$el.innerHTML

并用它来填充你的弹出窗口。

该方法的最大优点是可以生成具有所有vue功能的弹出内容(v-if,v-bind,无论如何),并且您不再需要混乱的字符串连接。

以上是关于在传单弹出窗口中显示列表的主要内容,如果未能解决你的问题,请参考以下文章

在传单弹出窗口中防止科学记数法 - R

如何将弹出窗口添加到折线中,当鼠标悬停在地图上的折线上时显示传单

在片段中使用列表视图

弹出窗口上的角度2传单动态绑定

如何在不同列表中显示jQuery弹出窗口

在 recyclerview 适配器类中显示自定义弹出窗口 - Android Java