Angularjs Angular+Firebase+AngularFire种子指令ShowAdmin
首先,对我的情况进行冗长的描述。。。我的应用程序使用Angular.js和AngularFire在没有后端的情况下运行。我使用Firebase Simple Login进行身份验证,AngularFire种子项目提供了获取身份验证信息的简单方法。要在应用程序中创建管理员,我将用户的uid存储在Firebase的/admin中,以便检查/admin/simpleLogin:45是否存在,例如,查看uid simpleLogin:45的用户是否是管理员 我正在尝试创建一个指令,如果当前用户是我的应用程序的管理员,该指令将导致显示一个元素。我已经写了一个部分有效的指令,但我很难解决这些问题。我请求你的帮助,勇敢的读者 这是我的指令代码:Angularjs Angular+Firebase+AngularFire种子指令ShowAdmin,angularjs,angularjs-directive,firebase,angularfire,Angularjs,Angularjs Directive,Firebase,Angularfire,首先,对我的情况进行冗长的描述。。。我的应用程序使用Angular.js和AngularFire在没有后端的情况下运行。我使用Firebase Simple Login进行身份验证,AngularFire种子项目提供了获取身份验证信息的简单方法。要在应用程序中创建管理员,我将用户的uid存储在Firebase的/admin中,以便检查/admin/simpleLogin:45是否存在,例如,查看uid simpleLogin:45的用户是否是管理员 我正在尝试创建一个指令,如果当前用户是我的应用
'use strict';
/* Directives */
angular.module('myApp.directives', []).
directive('appVersion', ['version', function (version) {
return function (scope, elm, attrs) {
elm.text(version);
};
}])
.directive('bpmShowAdmin', function ($rootScope, $scope, syncData, waitForAuth) {
return {
restrict: 'A',
compile: function (el, attr) {
el.addClass('hide');
waitForAuth.then(function () {
console.log('checking for admin rights');
var admins = syncData('admins');
admins.$on("loaded", function () {
var isAdmin = $rootScope.auth.user.uid in admins;
if (isAdmin) {
console.log('admin rights granted!');
el.toggleClass('hide', !isAdmin);
}
});
});
$rootScope.$on("$firebaseSimpleLogin:logout", function () {
el.toggleClass('hide', true);
});
}
}
});
该指令的使用方式如下:
<li bpm-show-admin>
...
</li>
这在大多数情况下都有效,但我显然不了解编译/链接阶段或类似的内容。当我第一次登录我的应用程序时,它并不总是显示我作为管理员登录时应该显示的所有内容。它在一两次刷新后工作,因此在我将指令逻辑编译与链接与控制器放在哪里时,存在某种竞争条件或问题
我一直以AngularFire种子项目的ngShowAuth为例,我相信它是由臭名昭著的卡托武夫开发的
我做错了什么和/或不理解
谢谢你的帮助 我开始用小提琴来寻求进一步的帮助,但最终我对在小提琴中设置我过于复杂的情况感到愤怒,并自己解决了这件该死的事情。以下是我的想法:
'use strict';
angular.module('bpmWaitForAdmin', [])
.service('bpmWaitForAdmin', function ($rootScope, syncData, waitForAuth) {
return {
init: function (auth) {
$rootScope.$on('$firebaseSimpleLogin:login', function (e, user) {
var admins = syncData('admins');
admins.$on("loaded", function () {
if (user.uid in admins) {
$rootScope.$broadcast('bpmWaitForAdmin:true');
}
else {
$rootScope.$broadcast('bpmWaitForAdmin:false');
}
});
});
$rootScope.$on('$firebaseSimpleLogin:logout', function () {
$rootScope.$broadcast('bpmWaitForAdmin:false');
});
}
};
})
.directive('bpmShowAdmin', function ($rootScope, $timeout) {
return {
restrict: 'A',
compile: function (element, attributes) {
element.addClass('hide');
$rootScope.$on("bpmWaitForAdmin:true", function () {
$timeout(function () {
element.removeClass('hide');
});
});
$rootScope.$on("bpmWaitForAdmin:false", function () {
$timeout(function () {
element.addClass('hide');
});
});
}
}
});
啊,一种耻辱的生活。所有那些可怕的黑客和错过的最后期限。我们在看什么版本的angularFire?有没有可能创建一个提琴、代码笔或类似的东西,这样我们就可以看到它的作用?如果没有一个重新开始,这将是艰难的。