Javascript 角度模式下的全局保存按钮

Javascript 角度模式下的全局保存按钮,javascript,angularjs,Javascript,Angularjs,我正在用Angular编写一个业务线应用程序,我遇到了一个无法找到很好解决方案的场景 我想显示一个横幅,说明用户有未保存的更改,他可以保存这些更改。因此,在我的index.html中,我使用bootstrap具有以下标记: <div class="alert alert-info" role="alert" style="margin: 20px;"> <button class="btn btn-info" ng-click="<CurrentControlle

我正在用Angular编写一个业务线应用程序,我遇到了一个无法找到很好解决方案的场景

我想显示一个横幅,说明用户有未保存的更改,他可以保存这些更改。因此,在我的index.html中,我使用bootstrap具有以下标记:

<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 click和ng show。换句话说,index.html如何知道当前活动的控制器

我曾考虑过广播/发射,但不知何故,这对我来说并不纯粹。我还考虑过让子控制器在$rootScope中“注册”自己,但如果引入错误,可能会导致我的控制器保存在旧控制器中

这方面的最佳做法是什么?我的设计有什么根本性的问题吗?

$dirty的任何表单都会告诉你表单是否脏

在表单控制器中,您可以监视任何表单更改并在服务中存储布尔值,记住在知道表单已脏时立即清除监视

$locationChangeStart在用户尝试导航到其他视图时被激发

在$locationChangeStart事件中注入服务,并检查布尔值是否为true或false


当$locationChangeSuccess

广播/发射比争论潜在的深层原型继承要干净得多时,请确保将布尔值清除为false或undefined。继承还意味着耦合每个控制器的数据结构。“全局保存”按钮应该只广播一个事件,每个控制器都可以根据自己的需要对该事件作出反应。@user2943490:但是,您如何传播控制器是否脏?我不介意说什么。如果没有控制器继承,我将把所有控制器的通用代码放在哪里?如果您有通用的控制器代码,mixin通常是更干净的模式。看,我不知道是谁否决了你,我希望他们能用你的答案说明问题。我可以很容易地拥有一个脏的控制器,而不需要表单。我不想把这个逻辑和用户界面联系在一起。超级英雄不能解释他为什么要投否决票!