【问题标题】:how to destroy or block mount events in mounted() vuejs如何在mounted() vuejs中销毁或阻止挂载事件
【发布时间】:2020-11-05 14:09:00
【问题描述】:

我正在制作一个包装器组件,所以我需要在mounted() 方法中添加所有事件。然而问题是,因为它是另一个组件,所以每当我打开该组件时,都会触发事件。我不确定如何阻止它。即使我使它在单击组件时被触发,但它不起作用。它仅适用于第一次安装。重新打开后(从第二次挂载),它只会触发所有事件,我必须阻止它。

有没有一种方法可以阻止不触发 vuejs 的 mount() 钩子中的事件?

编辑: 我正在制作传单绘制包装纸。所有事件均来自leaflet-draw doc。

this.addnew() 是被触发的。

objectLayer.on("layeradd", (e) => {
        let layer = e.layer;
        layer.on("click", onClickFeatureSelct, layer);

    if (typeof layer.options.id === "undefined") {
      layer.options.id = L.Util.stamp(layer);
    }

    if (!layer.feature) {
      let json = layer.toGeoJSON();
      layer.feature = L.GeoJSON.asFeature(json);
    }

    let properties = layer.feature.properties;
    let keyvalue = L.stamp(layer);

    if (layer instanceof L.NodeCircle) {
      let latlng = layer.getLatLng();

      itemType = "node";

      let nodes = this.$store.getters.nodeList;

      let result = false;
      for (let i = 0; i < nodes.length; i++) {
        if (nodes[i].keyvalue == keyvalue) {
          result = true;
        } else {
          result = false;
        }
      }
      if (!result) {
        console.log('layer added')
        // this.addNew(latlng, itemType, keyvalue);
      }

      if (!properties.NODE_ID) {
        properties.NODE_ID = parseInt(this.newNodeId);
        properties.NODE_NAME = "-";

        this.addedNodes.push(properties.NODE_ID);

        layer.bindTooltip(properties.NODE_NAME + "<br>(" + properties.NODE_ID.toString() + ")");
        nodeObj[keyvalue.toString()] = layer;
      }

      // console.log('added nodes', this.addedNodes)

          if (!nodeLayer.hasLayer(layer)) nodeLayer.addLayer(layer);
 }
      });

【问题讨论】:

  • 如何在挂载的钩子中注册事件以及哪些事件?以及如何触发事件?
  • 你能展示一些代码吗?这些挂载的方法是什么样的?
  • @Sphinx 添加了代码!
  • @DanielElkington 添加了代码!

标签: javascript vue.js vue-component lifecycle


【解决方案1】:

好吧,对于像我一样面临同样问题的人来说,这个问题得到了 5 分。这是我的做法...

  1. 组件相关时的 Vue.js 挂载顺序。 子组件 -> 父组件

  2. 添加 this.$nextTick() 不起作用。

  3. 即使它是一个 SPA Web 应用程序。当事件位于子组件中时,没有办法不触发事件。所以我只是让它重新加载......我知道这样做不是一个好主意,但我找不到任何其他方法来修复它。但是,我认为向父组件添加标志并在父组件准备好时触发该事件可能会起作用。

  4. 我会再次重试这个逻辑,然后告诉你我之后的表现。不会那么快的。对不起。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2019-03-04
    • 2020-07-04
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多