Wie neu zu laden-Direktive in AngularJS?

Ich versuche zu bauen, ein header-Richtlinie:

  • Wenn Sie angemeldet sind, angezeigt werden sollen, die den Benutzernamen und ein Log Out - Taste
  • Wenn Sie abgemeldet sind, sollten ausgeblendet werden die oben genannten Dinge

Ich bin mit einem benutzerdefinierten login-Dienst, erfasst diese Informationen und sendet die Ereignisse login und logout. Ich bin erfolgreich hören diese Ereignisse sowohl in der header-controller und der Richtlinie.

Wie kann ich ein reload der Richtlinie auf diese Ereignisse?


loginService.js:

angular.module("app")
    .service("loginService", ["$http", "$rootScope", function ($http, $rootScope) {
        var loggedIn = false,
            _username = "";

        this.logIn = function (username, password) {
            //do some validation...

            loggedIn = ...validation was successful;
            _username = username;

            if (loggedIn) {
                $rootScope.$broadcast("login");
            }
        };
        this.getUsername = function () {
            return _username;
        };
        this.isLoggedIn = function () {
            return loggedIn;
        };
        this.logOut = function () {
            loggedIn = false;
            $rootScope.$broadcast("logout");
        };
    }]);

headerController.js

angular.module("app")
    .controller("headerController", ["loginService", "$rootScope", "$location", function (loginService, $rootScope, $location) {
        this.isLoggedIn = loginService.isLoggedIn();
        this.username = "";

        $rootScope.$on("login", function (event) {
            this.isLoggedIn = loginService.isLoggedIn();
            this.username = loginService.getUsername();
        });

        this.logOut = function () {
            loginService.logOut();
            this.isLoggedIn = loginService.isLoggedIn();
            this.username = "";
            $location.path("/login"); //redirecting
        };
    }]);

header.html:

<header ng-controller="headerController as header">
    <span ng-if="header.isLoggedIn">{{header.username}} <button ng-click="header.logOut()">Log Out</button></span>
</header>

headerDirective.js

angular.module("app")
    .directive("header", function () {
        return {
            restrict: "A",
            transclude: false,
            templateUrl: "app/header/header.html",
            controller: "headerController",
            link: function (scope, element, attrs) {
                scope.$on("login", function (event) {
                    //show the ng-if in header.html??
                });
                scope.$on("logout", function (event) {
                    //hide the ng-if in header.html??
                });
            }
        };
    });

Ich bin mit diesem als <div header></div>.

sollte nicht die header-Richtlinie beschränkt sich auf restrict: "E" statt restrict: "A" da Sie es als ein element?
Du bist nicht wirklich mit der Richtlinie auf alle von dem, was ich kann sagen...die header element besteht in HTML5, und es wäre besser, zu vermeiden, verwirrend, sich einen Namen für euer element etwas anderes. Es ist gut, wenn es ein Attribut, aber es sollte anders benannt sein.
Ich fügte hinzu, beispielsweise die Nutzung als <div header></div>, sondern die Umbenennung für die Klarheit und die Nutzung dieser als ein element sind gute Ideen thx.

InformationsquelleAutor Ian Campbell | 2016-03-21

Schreibe einen Kommentar