我正在将我的应用程序从Angular 1.X迁移到Angular 2.0,我对迁移过程中/之后的路由解决方案有所了解。
我目前正在使用带有resolve
的ui-router,以便为每条路线传递数据。
经过一番阅读后,我遇到了this post。据我了解,新路由器中没有resolve
。我现在有两个选择:
继续使用我当前的ui-router与我的混合ng1-2应用程序(可能吗?),并通过路由器的resolve
传送每个路由的数据。它会起作用吗?
更改路由并使用新的Component Router
。这将使逐步升级变得更加困难,因为我将不得不将当前的Angular 1.X数据提取更改为每个控制器/指令内部+我将不会有Angular 2的@CanActivate
等待要解决的数据。
哪个选项更好?还有其他选择吗?什么在这里有用?
谢谢!
答案 0 :(得分:0)
我在工作中遇到了同样的问题。我尝试了很多东西,但最后我使用了一项服务:
var data = {
'foo': 'bar'
}
export const StateData = {
data: data
};
所以现在我的组件顶部可以导入服务:
import { StateData } from '/services/StateService.ts';
然后我可以通过简单地设置和获取服务中的数据:
StateData.data.foo = "something other than bar"
现在,当您切换路径时,可以在构造函数()或afterViewInit()方法中检索新的更新数据。
*使用StateService的另一个好处是,您只需添加以下方法即可在所有组件之间绑定数据(您可以将其命名为):
getStateData(key) {
return StateData.data[key];
}
您可以通过执行以下操作从dom本身调用此方法:
{{getStateData('foo')}} --> will print out the value "bar"
现在,如果您在另一个组件中更改服务中的foo值,它将在dom中更改,因为只要发生更改并且服务仅在页面加载时加载一次,就会调用getStateData()。
我相信init和afterViewInit方法是他们为什么没有将解析添加到新路由器的原因,或者他们仍然没有发布它的版本。
我希望这会帮助你。我不认为使用Angular 1.x + Angular 2.0会很容易,也不会很有趣lol
我最近在angular 2.0中重建了我的个人网站。代码是公开的,因此您可以查看它。如果您查看contactCard.ts,contact-card.html和StateService.ts,您可以看到它的实际效果。这是回购: