我正在用 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>
现在,我有一个用于当前 View 的 Controller 和一个全局 appController。
使用原型(prototype)继承,我的 Controller 包含跟踪用户所做更改的功能,并且能够执行实现我所需功能所需的任何操作。
我的问题是:
由于我的 rootScope 不知道子 Controller ,我需要做什么才能在上面的代码中绑定(bind) ng-click 和 ng-show 。换句话说,index.html 如何知道当前事件的 Controller ?
我考虑过broadcast
/emit
,但不知怎的,这对我来说似乎并不纯粹。我还考虑让子 Controller 在 $rootScope 中“注册”自己,但是如果我引入错误,这可能会导致我保存在旧 Controller 中。
对此的最佳实践是什么?我的设计有什么根本性的错误吗?
最佳答案
任何表单的
$dirty
都会告诉你该表单是否脏
在表单 Controller 中,您可以监视任何表单更改并在服务中存储 bool 值,记住一旦知道表单脏了就清除 watch
$locationChangeStart
当用户尝试导航到另一个 View 时触发
在 $locationChangeStart
事件中注入(inject)服务并检查 bool 值是否为 true 或 false。
请确保在 $locationChangeSuccess
时将 bool 值清除为 false 或未定义
关于javascript - Angular 中的全局保存按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27282723/