0

私はAngularにかなり慣れていないので、Angularのやり方で考えるのはかなり難しいと思います.

ログイン時にユーザー オブジェクトをロードする SessionService を登録しました。各コントローラーは SessionService に依存できるため、何らかのアクセス制御を行うことができます。

app.factory('SessionService',['$resource', function($resource){

    var service = $resource('/session/:param',{},{
      'login': {
        method: 'POST'
      }
    });

    var _user = { authorized: false };

    function getUser() {
      return _user;
    }

    function authorized(){
      return _user.authorized === true;
    }

    function unauthorized(){
      return _user.authorized === false;
    }

    function login(newUser,resultHandler) {
      service.login(
        newUser,
        function(res){
          _user = (res.user || {});
          _user.authorized = res.authorized;
          if(angular.isFunction(resultHandler)) {
            resultHandler(res);
          }
        }
      );
    }
    return {
      login: login,
      authorized: authorized,
      getUser: getUser
    };
  }]);

...これは、コントローラーから SessionService にアクセスする方法です。

app.controller('SidebarCtrl', ['$scope', 'SessionService', function($scope, SessionService) {
  $scope.template = '/templates/sidebar/public.html';
  if(SessionService.authorized()){
      $scope.template = '/templates/sidebar/menu.html';  // <-- ???
  }
}]);

...そしてここにhtmlファイル:

<div ng-controller="SidebarCtrl">
  <div ng-include src="template"></div>
</div>

これが私の質問です: SidebarCtrlのテンプレートをSessionService.authorizeに依存させるにはどうすればよいですか? そのため、サイドバーには、ユーザーがログインしているかどうかに応じて適切なコンテンツが表示されます。

これがあなたにとって理にかなっていることを願っています。

4

1 に答える 1

1

する必要が$watchありSessionService.authorized()ます。したがって、コントローラーを次のように変更します。

app.controller('SidebarCtrl', ['$scope', 'SessionService', function($scope, SessionService) {
    $scope.template = null;
    $scope.$watch(
        function() {
            return SessionService.authorized();
        },
        function(authorized) {
            if( authorized ) $scope.template = '/templates/sidebar/menu.html';
            else $scope.template = '/templates/sidebar/public.html';
        }
    );
}]);
于 2013-11-03T21:28:16.450 に答える