私がいることを見出しディレクティブ構築しようとしている:ログインしている場合、ログアウトした場合は、ユーザ名とログアウトボタン AngularJSでディレクティブをリロードする方法は?
- を
私はこの情報をキャプチャし、イベントlogin
とlogout
をブロードキャストするカスタムログインサービスを使用しています。ヘッダーのコントローラーとディレクティブの両方でこれらのイベントを正常に聴いています。
これらのイベントでディレクティブを再ロードするにはどうすればよいですか?
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??
});
}
};
});
私は<div header></div>
としてこれを使用しています。
ヘッダーディレクティブは制限されてはなりませんあなたが要素として使っているので、 '' restrict:restrict''の代わりに '' restrict: '' E''を使うことはできますか? – Minato
あなたは実際に私が言うことから指示を全く使用していません.HTML5には 'header'要素があり、あなたの要素を何か別のものにするのは混乱しない方がよいでしょう。属性の場合は問題ありませんが、別の名前を付ける必要があります。 – Makoto
私は使用例を '
'として追加しましたが、明確にするために名前を変更し、これを要素として使用することは良い考えです。 –