将Silverlight MVVM应用程序移植到AngularJS

时间:2014-07-08 10:29:30

标签: c# angularjs silverlight mvvm

我们正在将现有的Silverlight应用程序移植到AngularJS / Typescript中。

该应用程序具有经典的MVVM结构,包括数据模型,视图模型和视图。这些模型在某种程度上紧密相关:例如,有IObservable<>个事件流可以通知容器模型子模型中的变化。

这让我感到困惑:在MVVM中,绑定到视图的所有内容都是视图模型。一个视图模型可能包含其包含的其他视图模型的列表。但是,在所有具有WPF / Silverlight背景的人的AngularJS教程中,只有$scope被称为视图模型。嵌套对象怎么样?它们只是域数据模型,您可以直接绑定它们而不需要任何中间视图模型层吗?

然后,还有另一个问题:如果我的数据对象以某种方式发生了变化(例如,某些服务在从网络接收数据时更新它,或者它只是根据计时器进行了一些工作),我该如何通知视图它应该更新?

1 个答案:

答案 0 :(得分:2)

首先,我想说你不应该尝试将一项技术与另一项技术相匹配。在C#中做一个应用程序并不是在Javascript(或其任何风格)中做一个应用程序,所以试图在Angular / javascript上调用silverlight事件的名称并不是一个好主意。

我建议你(和你的团队)学习如何制作Angular应用程序,使用哪些组件用于什么目的,然后将IDEA移植到角度。像Silverlight应用程序一样编写Angular应用程序并不是一个好主意。

无论如何,为了回答,我会回答你的一些问题,因为我熟悉WPF / Silverlight。

在角度中,没有必要实现任何观察模式(有pubsub)。

通常,您有一些服务可以执行一些操作,例如访问后端的存储库模式或保存数据以在不同页面中使用。由于服务是单例,如果你从pageA修改它,pageB就会知道,所以没有必要告诉,这是隐含的。

$ scope作为控制器和视图之间的粘合剂。由于$ scope包含POJO(普通的旧javascript对象,你可以在其中放置任何你需要的东西。你可以拥有嵌套的对象或函数。然后你可以在视图中的$ scope上使用这些属性而没有任何问题。

如果服务查询后端,它会更新服务的数据,并且使用该服务的每个控制器将自动获取更新的内容。这里的诀窍是知道你不必杀死引用并只更新值。

因此,花一点时间学习Angular而不考虑Silverlight,了解每件作品并开始工作。这是我的建议。