使用Rails 5.2和Turbolinks,Webpacker和Angular 6复制页面

时间:2018-06-23 02:01:47

标签: ruby-on-rails angular turbolinks webpacker

我在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 %>

从表面上看一切正常,但是我观察到以下行为,

  • 从其他未运行Angular应用程序的页面(例如,home到about),所有都按预期运行
  • 直接放在/ contact上(在浏览器中输入localhost:3000 / contact,然后按Enter键)正常工作

但是,

  • 从其他页面导航到/ contact会导致两次请求/ contact

  • 从/ contact导航到根路径/会导致两次向/ 发送请求,

随后的请求又可以了。

我敢肯定这与turbolinks有关,但是我对它的理解还不够,无法确切地了解这里发生的事情。

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

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

另一个观察,与“ Accept”标头有关。对于普通的单个请求,“ 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上的生产版本中也可以观察到此行为,因此它不仅限于开发设置。

0 个答案:

没有答案