一个 运行 如何在 Vue 组件中每页只编写一次代码(当该页面上存在多个相同组件时)?

How does one run code in a Vue component only once per page (when more than one of the same component exists on that page)?

所以我有一个具有两个功能的 Vue 组件。一个附加一些数据并用该数据填充各种标签,另一个从 json 文件获取数据并对其进行解析 - 将其应用于另一个函数。

(前面的伪代码!)

mounted: function() {
  function listBuilder(data) { some code }
  $.get("some-json"), function (data) {
    [some code...]
    listBuilder(data);
  }
}

在页面本身,这个组件存在两次。

<section>
  <my-component type="map"></my-component>
</section>
<aside>  
  <my-component></my-component>
</aside>

一个组件以地图形式呈现数据,而另一个组件以列表形式呈现数据。这一切都很好 & 花花公子,除了在地图上数据呈现 2x - 因为,正如您可能已经猜到的那样,组件的逻辑是 运行 两次 - 获取 json 两次并处理它两次.

是否有本机 "Vue" 方法可以让(或指定)组件中的代码在页面上仅 运行 一次?我现在有一种相当(在我看来)、老套的方法来避免这种情况,方法是将 属性 应用于其中一个组件 ("dumb"),这实际上通过检查是否跳过了一些逻辑属性 存在。然而,我觉得必须有一种更优雅、更原生的方式来处理这个问题,但在我的 google 搜索中已经枯竭了。

好吧,我相信你会得到不同的回应,但我必须同意@pinoyyid 并建议将 http 部分提取到服务中作为开始,然后我将实施 Vuex(集中式本地数据可以是相当容易地与 Vue 集成),然后使用 Vuex 操作和获取器来获取和处理数据。这会将您的 vue 组件与获取和数据处理完全分开。您只会获取一次数据,然后可以根据需要多次使用它。最后但并非最不重要的一点是,与现在不同的是,测试将成为可能。

一种可能的方法是将组件数据加载移动到另一个父元素。另一种方法是拥有一个全局存储(如 vuex),然后从中加载数据。这正是 vuex 正在解决的问题类型。如果你不想使用 vuex 只需使用浏览器的 Window.sessionStorage it is well supported 并且你可以在其中存储你需要的所有数据。它是基于会话的,因此您不需要每次都加载信息。