升级到Angular 2.0路由策略

时间:2015-12-23 13:37:18

标签: angularjs angular-ui-router angular

我正在将我的应用程序从Angular 1.X迁移到Angular 2.0,我对迁移过程中/之后的路由解决方案有所了解。

我目前正在使用带有resolve的ui-router,以便为每条路线传递数据。

经过一番阅读后,我遇到了this post。据我了解,新路由器中没有resolve。我现在有两个选择:

  1. 继续使用我当前的ui-router与我的混合ng1-2应用程序(可能吗?),并通过路由器的resolve传送每个路由的数据。它会起作用吗?

  2. 更改路由并使用新的Component Router。这将使逐步升级变得更加困难,因为我将不得不将当前的Angular 1.X数据提取更改为每个控制器/指令内部+我将不会有Angular 2的@CanActivate等待要解决的数据。

  3. 哪个选项更好?还有其他选择吗?什么在这里有用?

    谢谢!

1 个答案:

答案 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,您可以看到它的实际效果。这是回购:

https://github.com/YashYash/portfolio