2015-12-23 69 views
2

我正在将我的应用从Angular 1.X迁移到Angular 2.0,并且在迁移过程中/迁移过程之后,我对迁移解决方案有了一些想法。升级到Angular 2.0路由策略

我目前使用的路由器,与resolve为了传递每个路由的数据。

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

  1. 继续用我的当前UI路由器与我的混合ng1-2的应用程序(这可能吗?),并通过路由器的resolve带来每条路线的数据。它会起作用吗?

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

哪个选项更好?还有其他选择吗?什么会在这里工作?

谢谢!

回答

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

+1

您的新遗迹关键是可见的回购,不知道这是否应该是公开的:) – Boris