2015-01-12 48 views
2

登錄我使用Auth0,讓我一次登錄完成如下檢索用戶的個人資料信息顯示內容:angularjs NG-顯示/ NG隱藏一旦用戶在

<span>Name is {{auth.profile.nickname}}</span> 

// UserInfoCtrl.js 
function UserInfoCtrl($scope, auth) { 
    $scope.auth = auth; 
} 

我想要做什麼使用ng-show和ng-hide僅在用戶登錄後才顯示內容。其他人如何實現此目的?我設想就像一個條件語句我UserInfoCtrl.js如內:

if($scope.auth !== null) { 
    $scope.loggedin 
} 

UPDATE:每約falselys的意見和$ scope.auth提供一定的價值,也許是更好的綁東西登錄控制器。有任何想法嗎?

// Login and logout functionality 
pfcControllers.controller('loginCtrl', ['$scope', 'auth', '$location', 'store', function ($scope, auth, $location, store) { 
$scope.login = function() { 
    auth.signin({}, function (profile, token) { 
     store.set('profile', profile); 
     store.set('token', token); 
     $location.path("/"); 
    }, function (error) { 
     console.log("There was an error logging in", error); 
    }); 
} 

$scope.logout = function() { 
    auth.signout(); 
    store.remove('profile'); 
    store.remove('token'); 
    $location.path('/login'); 
} 
}]); 
+2

'ng-show =「auth」' - 如果'$ scope.auth'是虛假的,它將不會顯示。雖然你應該隱藏並從服務器上顯示,任何人都可以編輯HTML。 – tymeJV

回答

4

如果$scope.auth只有當用戶登錄時,你可以做一個值:

<span ng-show="auth">Name is {{auth.profile.nickname}}</span> 

這樣一來,你就只能看到span如果auth定義。

+0

不幸的是,它沒有工作。看來auth正在返回一些東西。也許我們可以將某些東西綁定到登錄控制器。我已更新我的帖子。 – Kode

+1

@Kode如果'auth'返回一些東西,然後深入一點,並檢查與登錄用戶綁定的不同值,可能是'auth.profile'。只有你知道如何實現:) –

+0

使用$ scope.loggedin = auth.profile;完美的作品! – Kode

1

做到這一點的最簡單的方法是把這個在您的視圖代碼:

<div ng-show='auth'></div> 

現在,這是不是最好的做法,我會建議你使用令牌,here是一篇關於在角

令牌

注: 這不是一個有效的JS語法:

if($scope.auth is not null { 
    $scope.loggedin 
    } 

用這個代替:

if($scope.auth != null) { 
    $scope.loggedin 
} 
4

出於安全原因,我認爲您的服務器應該只在用戶登錄時發送記錄區域的內容。

但是,如果由於某種原因,你需要做記錄的區域這種控制你有一些替代方案:你的元素上

  1. 使用NG秀=「身份驗證」。它將根據'auth'值顯示或隱藏元素。元素永遠不會從DOM中移除,frameworky只需添加或移除一個css類;
  2. 在元素上使用ng-if =「auth」。它會根據授權值添加或刪除元素。如果auth評估爲false,則該元素將被完全刪除;

ng-show和ng-if都接收到一個表達式,則引用爲here

嘗試做:

  1. 你的控制器的方法創建:$ scope.loggedin = FALSE;
  2. 更新$範圍。登錄值可以更改的地方;
  3. 關於html的使用ng-show =「loggedin」或ng-if =「loggedin」;
  4. 如果更改登錄值的函數未從角度(事件...)調用,請嘗試$ scope。$ apply(function(){....})。請參閱here