簡體   English   中英

將Silverlight MVVM應用程序移植到AngularJS

[英]Porting Silverlight MVVM app to AngularJS

我們正在將現有的Silverlight應用程序移植到AngularJS / Typescript中。

該應用程序具有經典的MVVM結構,其中包含數據模型,視圖模型和視圖。 這些模型之間緊密地聯系IObservable<> :例如,有IObservable<>事件流將子模型內的更改通知容器模型。

這就是令我困惑的地方:在MVVM中,綁定到視圖的所有內容都是視圖模型。 一個視圖模型可能包含其包含的其他視圖模型的列表。 但是,在所有WPF / Silverlight背景的AngularJS教程中,只有$scope被稱為視圖模型。 嵌套對象呢? 它們只是域數據模型,您直接綁定到它們而沒有任何中間視圖模型層嗎?

然后,還有另一個問題:如果我的數據對象以某種方式發生了變化(例如,某些服務從網絡接收數據時會對其進行更新,或者僅根據計時器進行某些工作即可),如何通知視圖應對其進行更新?

首先,我想說的是,您不應該嘗試將一項技術與另一項技術相匹配。 用C#編寫應用程序不是使用Javascript(或其他任何形式)編寫應用程序,因此嘗試在Angular / javascript上如何調用Silverlight事情起個名字並不是一個好主意。

我建議您(和您的團隊)學習如何制作Angular應用程序,將哪些組件用於什么目的,然后將IDEA移植到angular。 像Silverlight應用程序一樣編碼Angular應用程序不是一個好主意。

無論如何,為了回答這個問題,由於我對WPF / Silverlight十分熟悉,所以我會回答您的一些問題。

在Angular中,真正不需要實現任何觀察模式(存在pubsub)。

通常,您的服務具有多種功能,例如用於訪問后端或保存數據以在不同頁面中使用的存儲庫模式。 由於服務是單例的,因此,如果您從pageA對其進行修改,則pageB會知道,因此無需指出,這是隱式的。

$ scope充當控制器和視圖之間的粘合劑。 由於$ scope擁有POJO(可將普通的javascript對象放置在所需的任何位置。可以在其中放置嵌套的對象或函數。然后可以在視圖中的$ scope上使用這些屬性,而不會出現任何問題。

如果服務查詢后端,它將更新服務的數據,並且使用該服務的每個控制器將自動獲取更新的內容。 這里的竅門是知道您不必殺死引用,而只需更新值即可。

因此,花一點時間來學習Angular,而無需考慮Silverlight,了解每一部分的功能並開始工作。 那是我的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM