首页 > 解决方案 > 使用 Rails 5.2 和 Turbolinks、Webpacker 和 Angular 6 获取重复页面

问题描述

我在 Rails 中有一个运行 Angular 6 应用程序的联系页面,

<% content_for :content_title, "Contact Us" %>

<% content_for :metatags do %>
  <!-- This is to get rid of "Zone already loaded error" from a combination of Angular and Turbolinks' doing-->
  <meta name="turbolinks-visit-control" content="reload">
<% end %>

<% content_for :scripts do %>
  <%= javascript_pack_tag 'contact',
        "data-turbolinks-track": "reload" %>
<% end %>

<%= render "pages/layout" do %>
  <% content_for :title, "Contact Us" %>
  <div class="divider"></div>

  <div class="container" style="max-width: 800px;">
    <div class="section">
      <div class="card-panel">
        <contact>Loading...</contact>
      </div>
    </div>
  </div>
<% end %>

从表面上看,一切都按预期工作,但我观察到以下行为,

然而,

后续请求再次正常。

我确定这与 turbolinks 有关,但我对它的理解还不够,无法准确指出这里发生了什么。

添加 data-turbolinks="false" 解决了对 /contact 的重复请求的问题,但是由于导航离开 /contact 而导致的重复请求仍然存在。

<%= link_to "Contact", contact_path, data: { turbolinks: false } %>

一个额外的观察,这是关于“接受”标题的。对于正常的单个请求,“Accept”标头是,

"accept": text/html, application/xhtml+xml

对于重复的请求,第一个标头是,

"accept": text/html, application/xhtml+xml

第二个标题是,

"accept": text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

如果有人能告诉我这里发生了什么,我将不胜感激。这种行为在 Chrome 和 Safari 上都可以观察到,并且在 Heroku 上的生产版本中也可以观察到,因此它不仅限于开发设置。

标签: ruby-on-railsangularturbolinkswebpacker

解决方案


推荐阅读