2014-12-03 84 views
1

保存按鈕我寫在角業務線的應用程序,和我所遇到的情景我不能完全找到一個不錯的解決方案。全球的角度

我想展現的一面旗幟,說明用戶有未保存的更改,而他也救不了他們。所以在我的index.html,我有(使用引導程序)以下標記:

<div class="alert alert-info" role="alert" style="margin: 20px;"> 
    <button class="btn btn-info" ng-click="<CurrentController.Save()>" ng-show="<HasChanges>">Save</button> 
    <span>You have unsaved changes. Use the button here to save them.</span> 
</div> 

現在,我有我的當前視圖控制器,以及一個全球性的AppController。

使用原型繼承,我的控制器包含的功能來追蹤變化的用戶進行,並且能夠執行任何必要行動,以實現我想要的功能。

我的問題是:

由於我rootScope不知道孩子的控制器,做什麼我需要做的是能結合NG-點擊NG出現在我上面的代碼。換句話說,index.html將如何知道當前活動的控制器?

我想過broadcast/emit,但不知何故,這對我來說似乎並不純。我也有關於讓子控制器使用$ rootScope註冊自己,但如果我引入錯誤,這可能會導致我保存在舊控制器中。

,這是什麼最好的做法是什麼?我的設計有什麼根本錯誤?

+0

廣播/ EMIT比扯皮潛在的深原型繼承乾淨多了。繼承也意味着耦合每個控制器的數據結構。全局保存按鈕應該只是廣播一個事件,每個單獨的控制器可以根據自己的情況做出反應。 – user2943490 2014-12-04 02:54:16

+0

@ user2943490:但是,無論控制器是否髒污,您將如何傳播?我不介意說出來。如果沒有控制器繼承,我會在哪裏放置所有控制器通用的代碼? – 2014-12-04 06:49:55

+0

如果你有共同的控制器代碼,mixin通常是更乾淨的模式。見http://stackoverflow.com/questions/16539999/angular-extending-controller – user2943490 2014-12-04 08:21:20

回答

-1

任何形式將告訴你窗體是否是髒的

形式控制器,你可以觀看任何形式的變化和服務存儲一個布爾值,記得要儘快清除手錶$dirty你知道的形式是髒

$locationChangeStart被觸發,當用戶試圖導航到另一個視圖

$locationChangeStart事件注入的服務和檢查,看看是否布爾值的虛假事實。

請確保您清除假或未定義的布爾值當$locationChangeSuccess

+0

(我不知道是誰downvoted你,我希望他們說出對你的回答這個問題)。我可以很容易地擁有一個沒有表格的骯髒的控制器。我寧願不將這種邏輯與用戶界面聯繫起來。 – 2014-12-04 06:49:00

+0

downvote不能超級英雄解釋他爲什麼投票! – 2014-12-05 08:25:20