2014-12-03 65 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