2017-01-25 2 views
1

でサービスから関数を呼び出し、私は私がログインしていないのですときにそれを見せたい、私はサービスを使用することによって、これを達成したい:。私は、ログインボタンでレイアウトページを持っているコントローラの角度ngの非表示

app.service('AuthService', function ($http) { 
     this.getUserStatus = function() { 
      return $http({ 
       url: '/auth/status', 
       method: "GET" 
      }); 
     }; 
}); 

その後、私はそうのようなコントローラでそれを呼び出す:

app.controller('MenuController', [ 
    '$scope', 
    '$http', 

function ($scope, AuthService) { 

    $scope.authorize = function() { 
     AuthService.getUserStatus(); 
    } 
    } 
]); 

は、最後に私がログアウトボタンを表示または非表示にするレイアウトでNG-コントローラとngの非表示を使用します。

<body ng-app="headcountApp"> 
<nav ng-controller="MenuController"> 
    <ul> 
    <li ng-hide="authorize"> 
     <a href="#/">Login</a> 
    </li> 
    <li> 
     <a href="#/employee/add">Add</a> 
    </li> 
    <li> 
     <a href="#/employees">employees</a> 
    </li> 
    <li> 
     <a href="#/edit">Edit</a> 
    </li> 
    <li> 
     <a href="#/delete">Delete</a> 
    </li> 
    <li> 
     <a href="/logout">logout</a> 
    </li> 
    </ul> 
</nav> 

私の問題は、それが常に隠されているということです。値は常に真実です。これをどうすれば解決できますか? $http()の結果を返す

app.controller('MenuController', [ 
'$scope', 
'$http', 
'AuthService', 

function ($scope, $http, AuthService) { 

$scope.authorized = false; 
    AuthService.getUserStatus().then(function(res){ 
    $scope.authorized = res.data; 
    }); 
    } 
]); 

答えて

2

AuthService.getUserStatus();

これは、問題を修正しました。 $http()コールの結果はpromiseです。あなたは、httpリクエストの結果を得るために約束して解決コールバックを登録する必要があります。

$scope.authorize
$scope.authorized = false; 
$scope.authorize = function() { 
    AuthService.getUserStatus().then(function(res){ 
     // If result from server indicate login state set $scope.authorized = true 
    }); 
} 

そして、あなたのビューのバインド中:

<li ng-hide="authorized"> 
    <a href="#/">Login</a> 
</li> 
+0

更新された例はまだ間違っているあなたが使用しているので 'インジェクタの依存関係を指定する際に、 '' AuthService ''ではなく 'http' 'を指定してください。 –

+0

私はAuthServiceを使用しなければなりませんでしたが、コントローラはまだ$ httpが必要だったので関数は未定義でした。しかし、私は解決策で私の答えを更新しました。 – Snackoverflow

関連する問題