AngularFire Seed指令" isAdmin"或" showAdmin"

时间:2015-05-18 10:44:14

标签: angularjs firebase angularjs-service angularfire angular-ui-router

我正在使用AngularFire Seed项目。我想为管理员和普通注册用户显示不同的视图。 AngularFire Seed项目有内置指令,名为" ngShowAuth"你可以在这里找到:simpleLoginTools。该指令用于显示已注册和未注册用户的不同视图。同样,我想为管理员和用户显示不同的视图。

我绊倒了,发现了这个stackoverflow resource。我试图实现它并且它不起作用。我想在user.uid可用时立即启动此服务。

我最好只想执行服务,一旦isAdmin设置为true或false,我想过滤状态路由中的视图。

这是服务和指令:

'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');
                    });
                });
            }
        }
    });

0 个答案:

没有答案