如何确保回调只添加一次
How do I make sure a callback is only added once?
我有一些这样的代码。
.factory('Auth', function($firebaseAuth) {
var ref = new Firebase('https://myfirebase.firebaseio.com');
return $firebaseAuth(ref);
})
和一个控制器
.controller("LoginCtrl", function($scope, Auth, $timeout) {
function authDataCallback(authData) {
$timeout(function() {
console.log(Auth);
$scope.user = authData;
if (authData) {
console.log("Authentication ok.");
}
});
}
$scope.auth = Auth;
console.log("Adding a new callback in login");
$scope.auth.$onAuth(authDataCallback);
...
在我的应用程序中,访问者可能会被重定向回登录页面(并且再次调用此 LoginCtrl 控制器)。发生的情况是再次添加相同的回调。因此,在返回登录页面几次时,回调中的代码会被多次调用。
如何取消/删除离开/加载控制器时的回调?
谢谢!
将
公共布尔属性添加到 Auth 服务,该属性保存用户的身份验证状态。 用户通过身份验证后,将其设置为 true。
然后,在调用回调之前,请检查是否需要根据以前的值设置运行回调代码。
if (!Auth.isUserAuthenticated) {
$scope.auth.$onAuth(authDataCallback);
}
我不得不说,我可以向您展示强制函数仅从 lodash 或其他地方运行一次的模式,但真正的问题是,与服务等不同的控制器不是单例,表达式在摘要周期中至少运行一次,并且摘要周期不是一次性过程。您的问题是架构问题,因为您的控制器拥有的逻辑不仅仅是管理行为。
需要确保应用的所有主要业务逻辑都在服务内部,并且控制器仅通过调用这些服务上的方法或从中读取状态来管理自己的行为。
这是一个草图,但我希望你得到一般原则。
相关文章:
- 图像上传功能将++(+1)副本添加到下一次上传.出了什么问题或如何重置“选定图像”
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- ng只重复添加项目一次
- 如何在函数中添加一次单击事件
- 当所有表单字段都完成时,jquery将图像添加到列表项中一次
- 在 foreach 循环中添加一次标题
- 在鼠标悬停时添加事件,如何只添加一次事件
- 如何确保回调只添加一次
- 添加 removeMarker 函数时,每 5 秒在地图上加载一次图钉不会显示图标
- 在 CakePHP 中,现在 View->addScript() 已被弃用,我如何向我的布局添加脚本*一次*
- 允许用户添加表单输入字段:为什么 append() 只工作一次
- 将同一记录多次添加到数据库,而不是仅添加一次
- 如何在索引数据库中仅添加一次初始数据
- 在滚动时没有获取新数据,而是在滚动时一次又一次地添加相同的 json 数据
- 只添加一次调整大小事件处理程序
- 如何只添加一次JavaScript库
- 只添加一次具有Jquery地址的State
- 单击时添加一次文本进行输入
- 当使用局部视图时,只添加一次javascript代码
- 如何确保事件只添加一次