为什么我应该在EmberJS中使用{{#link-to}}而不是<a></a>?

时间:2017-05-29 16:30:03

标签: ember.js

这是一个非常新手的问题。但是,在EmberJS中,我发现这两种方法都适用于链接到我的应用程序中的博客页面。

<p>{{#link-to 'posts'}} See my blog{{/link-to}}</p>
<a href="posts"> See my blog</a>

在EmberJS中使用{{link-to}}会更好吗?怎么样?

1 个答案:

答案 0 :(得分:5)

不同之处在于Window w = context.getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 组件将导航到当前运行的Ember应用程序中的指定路由,而{{link-to}}将向该位置执行新的浏览器请求并重新启动您的Ember应用程序那条路。您应该使用<a href="posts">,因为您将使用Ember内部在单页应用程序中导航,这将是一种更流畅的用户体验。

虽然他们都可以工作,但仔细观察您的浏览器,您会看到锚标记将为您提供页面刷新并重新启动您的Ember应用程序(尽管位于正确的位置)。使用{{link-to}}会感觉更快,因为Ember通过javascript呈现新页面而不是在页面刷新后重新启动。这是在单页应用程序中导航和从外部页面跳转到SPA之间的区别。

虽然Ember会在运行时渲染锚标记代替{{link-to}},但它会插入以停止默认的锚标记行为。文档解释如下:

  

默认情况下,{{link-to}}组件会阻止默认浏览器   通过调用{{link-to}}进行操作,因为这种动作冒泡了   通常在内部处理,我们不想使用浏览器   一个新的URL(例如)。

(来自https://emberjs.com/api/classes/Ember.Templates.helpers.html#toc_allowing-default-action

此外,使用preventDefault()组件,您可以将模型直接传递到路径中。这有点先进,但Ember指南有一些很好的例子。 https://guides.emberjs.com/v2.13.0/templates/links/