2014-06-18 27 views
0

原諒如果這是一般的,但我正在尋找一種方法,我是新來的Angular。假設我有一個主控制器和一個運行時創建的模態控制器。讓他們成爲WidgetCtrl和NewWidgetModalCtrl。更新家長或其他同時角控制器的最佳做法?

我想創建一個Widget並使用$resource.save()將該數據發送到服務器。它返回一些數據,我們關閉「New Widget Modal」(它被銷燬)。我如何將這個小部件添加到WidgetCtrl的列表中

有人說使用共享服務/工廠。但問題是這些是單身人士。我可能需要兩個單獨的Widgets列表。我可能需要購物車列表中的小部件和熱門列表。如果我使用單身人士,我很確定它是所有控制器中的靜態列表。我不得不復制非常相似的類來具有相同的結構化但不相似的數據。 ....?它非常適合像所看到的這個例子會話:Model Shared Between Two Controllers,但沒有得到很好的東西,像瀏覽,並從同類型對象的各種列表中選擇。

如何獲得抽象Widget定義,以及控制器之間的構建和控制列表? Angular討論似乎認爲通過修改父$ scope對象來考慮x控制器通信是一種不好的做法。在這種情況下這是非常糟糕的,因爲我可以有任何數量的模態出現。

有人說做$發射,然後在「父」範圍刷新數據。但是,當我們所做的只是添加一個小部件時,這會導致所有數據從服務器重新加載。

$scope.$watch('widgets', function(){ 
     this.widgets = Widget.query(); //get all widgets 
    }); 

我猜我這裏尋找的是擴展了可以在這兩個位置被引用,並通過$資源或應用添加到基礎模型定義,而不是一個單獨的實例變量誰將始終更新該類型的任何列表。我只是困惑在這裏,我應該繼續做一個(工廠)PopularWidgetModel和(工廠)CartWidgetModel?看起來很乏味。也許我不太明白this將適用於我的情況。

回答

1

我有點困惑,但我會在一個答案採取刺​​傷。

當小部件數據來自$回來保存,可以使用。那麼()將它添加到$ scope.widgets在widgetCtrl。如果你想在控制器之間共享這個列表(與彼此沒有層次關係),這個小部件列表應該在你注入每個控制器的服務中。然後每個控制器將擁有

$scope.widgets = widgetService.widgetList; 

其中widgetList由您對$ resource函數的調用進行更新。

任何你想要顯示這個小部件列表的地方,你都可以在小部件中使用ng-repeat =「widget」。

如果你有不同的列表,就像一個車,一個流行的,那麼你可能會找到一種方法,包括「inCart」或「inPopular」作爲您的控件對象的屬性。然後你可以使用

<div ng-repeat="widget in widgets" ng-if="widget.inCart"> 

<div ng-repeat="widget in widgets" ng-if="widget.inPopular"> 

<div ng-repeat="widget in widgets | filter:{inCart:true}"> 

等。我不是100%確定過濾器的語法,但是可以這樣做。

我不認爲你在這裏需要兩個工廠,因爲它是相同的數據;但就像你說的,你可能想用不同的方式展示它,或者在這裏展示部分列表,在那裏列出部分列表。

此外,指令可能在這裏有幫助,因爲它聽起來像你想要一個「抽象小部件定義」,對我來說,這聽起來像一個指令。他們有自己的控制器,可以有一個獨立的作用域,或者像使用$ scope.parentVar一樣容易地共享父控制器的作用域。

希望有所幫助。

+0

自一段時間以來,這與我最終做的事情非常接近。我發現你也可以爲多個模型集合添加對象引用,即使這些對象本身不是「模型」,而只是簡單的對象......因此,將業務邏輯委託給「集合模型」而不是嘗試將複雜對象傳遞到集合中。我想這個問題應該被解釋爲一個主要的概念問題。 – FlavorScape

相關問題