【问题标题】:Porting Silverlight MVVM app to AngularJS将 Silverlight MVVM 应用程序移植到 AngularJS
【发布时间】:2014-07-08 10:29:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在大多数情况下,通过双向数据绑定,您无需通知任何内容,如果$scope.thing 发生更改,{{thing}} 将立即在 DOM 中呈现更改。
  • @Pak,如果那里有一个复选框网格,比如$scope.rows[0].items[1].isEnabled,并且在超时时设置为false,该怎么办? AngularJS 是怎么知道的?
  • 看看$watch

标签: c# angularjs silverlight mvvm


【解决方案1】:

首先,我想说的是,您不应该尝试将一种技术与另一种技术相匹配。用 C# 做一个应用程序不是用 Javascript(或它的任何风格)做一个应用程序,所以试图在 Angular/javascript 上如何调用 silverlight 的东西上命名不是一个好主意。

我的建议是您(和您的团队)了解 Angular 应用程序是如何制作的,哪些组件用于什么目的,然后将 IDEA 移植到 Angular。编写像 silverlight 应用程序这样的 Angular 应用程序并不是一个好主意。

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

在 Angular 中没有真正需要实现任何观察模式(有 pubsub)。

通常,您的服务会做几件事,例如存储库模式来访问您的后端或保存您的数据以在不同页面中使用。由于服务是单例的,如果你从pageA修改它,pageB就会知道,所以不用说,那是隐含的。

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

如果服务查询后端,它会更新服务的数据,使用该服务的每个控制器都会自动获取更新的内容。这里的诀窍是知道您不必终止引用而只需更新值。

所以,花一点时间来学习 Angular,而不用考虑 Silverlight,了解每个部分的作用并开始工作。这是我的建议。

【讨论】:

  • 感谢您的详细解答。我同意最好的方法是使用 Angular 提供的原生方法,而不是试图在其中模仿 Silverlight。
  • 确实,但尝试将您的知识映射到有角度的东西也没有错,您不会对此感到厌烦:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2016-07-13
  • 2017-05-21
  • 2010-11-29
  • 2011-08-04
  • 2014-05-28
相关资源
最近更新 更多