TL; DR Embers组件只是智能HTML模板。为什么他们不像Angular那样为自己取得数据呢?以及如何在更多的URL /页面上共享路由模型。似乎我必须知道哪个组件放在哪个URL上,我必须使它们成为路由模型上可用的数据。为什么这部分不在组件中?
我现在在Ember.js学习。我至少尝试过。 目前,我有一个很大的问题需要理解为什么Ember.js就像它一样。如果我在某些陈述中出错,请纠正我。我是Ember.js的初学者。所以也许我说的不正确。
假设我们在/
上有一个请求,然后Ember尝试在app/routes/index.js
中找到路由模型,此文件包含我想从后端获取的数据的代码。接下来Ember将在此文件中呈现app/templates/index.hbs
我有一个名为car-list
的组件。
到目前为止没有任何问题,但让我们仔细看看。对我来说,我自己必须首先获取数据,为什么组件本身不会这样做,这感觉很奇怪?接下来的问题是如何在更多路由之间共享模型获取逻辑?也许我想将我的组件放在许多URL /页面/路由上然后我必须复制路由模型逻辑?
在我看来,组件应该自己获取数据,您可以轻松地将组件插入到其他页面上,而无需复制整个路径模型获取逻辑。
所以我必须知道哪些组件放在哪个URL上,我必须使它们成为路由模型上可用的数据。为什么这部分不在组件中?
所以也许我对Ember不够好,我只是忽略了什么?
答案 0 :(得分:3)
组件非常灵活。组件已经成为可重用的。例如,您可以创建一个表组件并用于汽车,船舶等。
因此,为了可重用性,您可以更好地将模型提供与组件分开。
但是如果你想创建一个当前项目的组件并且需要自己获取它的数据,你可以获取组件中的数据。
在某些情况下,您可能希望获取路径中的数据。例如,在您的页面中,您有多个组件,每个组件都需要在路径中获取数据模型的投影。
所以这取决于你的要求,也许你需要获取组件或路由中的数据,甚至两者(混合)
答案 1 :(得分:1)
组件当然可以加载自己的数据,并且在许多情况下是合适的。但允许路由加载数据有几个重要的好处,如果你坚持这种模式,你可以“免费”获得:
无论如何,许多页面上显示的用户名组件通常在路由层次结构中都相当高,例如在application
模板中,它很容易加载&从一个地方渲染一次,让它在每个儿童路线上都可见。
但是如果你确实需要在很多地方使用一个组件,并且它的数据应该是自包含的,那么让它自己加载就可以了。在这种情况下,您可以依靠Ember Data的存储来为您提供缓存响应(因此您只是第一次触发网络请求)或编写处理组件持久状态的服务。