没有重新加载的动态网页

时间:2015-06-10 12:05:06

标签: javascript html css node.js meteor

我刚刚发现了slack.com,我爱上了他们处理界面的方式。如果您从未使用它,那么它很容易:

右边有一个侧导航栏和一个主容器。每次单击侧面导航栏中的项目时,它的内容都会加载到容器中。重点项目发生变化,容器内容发生变化,但页面没有重新加载。

如果数据在此期间发生变化,则会神奇地更新。

实现这样的目标需要什么?

  1. 更改网址,不重新加载网页
  2. 内容始终保持最新
  3. 过去几天我一直在看meteorjs但是网址部分从未被提及过。

4 个答案:

答案 0 :(得分:2)

是。 Slack太棒了。我们(我的团队)每天都使用它。我经常使用它,在某些时候我不检查电子邮件,但我查看了松弛。

所以,直到你的问题。

  1. 更改网址,不重新加载网页
  2. 可以通过javascript [Tl; dr]

    轻松完成

    代码:

    window.history.pushState("object or string", "Title", "/new-url");
    
    1. 内容始终保持最新
    2. 这可以通过两种方式完成, 一世。通过Ajax和Javascript II。通过插座

      我。通过Ajax和Javascript: 在javascript中你可以使setTimeout函数在一段时间内触发ajax请求。通过Ajax,它将从后端获得最新消息,并将显示。

      II。通过插座: 在socket中,在你使用node.js的情况下,有一个非常流行的库socket.io,它将实时获取和更新消息。

      祝你好运!

答案 1 :(得分:1)

你需要Ajax。您可以将它与脚本结合使用,可能是PHP,它通过定时器间隔检查数据库的状态("心跳"),如果有任何更改,则加载新数据。我建议将日期时间戳的特定列与之进行比较,以便在此时对数据库进行尽可能小的加载,因为很多用户同时在页面上会产生大量请求。

答案 2 :(得分:0)

对于"网址更改功能但没有重新加载",我认为@Kavan Pancholi回答了您的问题。实现这一目标的另一种方法是使用iron-router的yield templates功能。

你正在使用meteor,这意味着你可以这样做而不会有太多麻烦(忘记Ajax和套接字)。

我不知道Slack(但我肯定会看一下)但据我所知,所有数据都是预加载/延迟加载的,它们只会更改显示的元素。换句话说,您可以随时准备并加载所有客户订阅,或者在加载yield模板时将其启动。

如果我发现我没有正确理解你的目标,我会看看Slack并编辑它。

修改确定我试过了。你需要使用带有铁路由器的yield模板,并且他们还添加了一些你可以使用_uihooks +加载模板实现的过渡效果

答案 3 :(得分:0)

最重要的是,如果你使用像angular这样的框架,你会注意到这样的网址:

  

http://localhost:3000/#/chat/room

您可能已经看到类似于维基百科的类似网址:

  

https://en.wikipedia.org/wiki/Cat#Cats_and_humans

那个小<polymer-element name="custom-selector" attributes="host data"> <template> <core-ajax id="employeesgetter" handleAs="json" url="dosql" on-core-error="{{onError}}" response="{{data}}"> </core-ajax> <paper-dropdown-menu label="Dropdown with Data" on-core-select="{{selectData}}"> <paper-dropdown class="dropdown"> <core-menu class="menu"> <template repeat="{{employee in data.employees}}"> <paper-item name="{{employee.firstName}}">{{employee.firstName}}</paper-item> </template> </core-menu> </paper-dropdown> </paper-dropdown-menu> </template> <script> Polymer('custom-selector', { data: { employees: [] }, ready: function () { console.log('firing ready'); this.host = this.host || 'example.com'; this.$.employeesgetter.go(); }, onError: function (e, resp) { console.log('onError'); console.log('error!: ' + resp.response); } }); </script> </polymer-element> 不会在网址上重新加载页面,因此您可以使用它来制作网址路由操作,而无需更改网页。您可以使用#访问它。所以在维基百科的文章中,你得到了

window.location.hash

将它与ajax和事件监听器结合起来,你可以做类似的事情。

> window.location.hash
#Cats_and_humans
相关问题