Javascript 角度模式下的全局保存按钮
我正在用Angular编写一个业务线应用程序,我遇到了一个无法找到很好解决方案的场景 我想显示一个横幅,说明用户有未保存的更改,他可以保存这些更改。因此,在我的index.html中,我使用bootstrap具有以下标记: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
<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通常是更干净的模式。看,我不知道是谁否决了你,我希望他们能用你的答案说明问题。我可以很容易地拥有一个脏的控制器,而不需要表单。我不想把这个逻辑和用户界面联系在一起。超级英雄不能解释他为什么要投否决票!