Angularjs:基于current_user的条件语句

时间:2013-10-01 17:28:36

标签: ruby-on-rails angularjs devise

现在我已经被困了好几天了。我想根据当前用户(id)显示项目。

举个例子:

<!-- if current user has already 'liked' this post -->
    Show 'UnLike' button
<!-- else -->
    Show 'Like' button
<!-- end -->

如何根据Angularjs中当前用户的ID使用条件语句?

我使用Rails作为我的后端以及Devise,如果它有帮助..

2 个答案:

答案 0 :(得分:4)

让我们轻松一点。

首先,setup gon

在Rails控制器级别,无论何时需要,或在before_filter(Rails 4中为before_action)中,执行:

gon.current_user = { id: current_user.id } 

然后在Angular方面:

app.service 'sessionService', [ '$window', ($window)->

  factory =
    current_user: ->
      $window.gon.current_user

  factory
]

然后注入会话服务,您将可以通过方法

访问current_user对象

答案 1 :(得分:2)

如果您想要在客户端处理此问题的“Angular方式”,您可能需要查看我创建的working CodePen example

模板:

<section ng-app="app" ng-controller="MainCtrl">
  <ng-switch on="hasLiked">
    <button class="btn btn-primary" ng-switch-when="true">Unlike</button>
    <button class="btn btn-primary" ng-switch-when="false">Like</button>
  </ng-switch>
  <br>
  <button class="btn toggle" ng-click="hasLiked = !hasLiked" ng-bind-template="Change result of service call from '{{hasLiked}}' to '{{!hasLiked}}'">Change</button>
</section>

javascript:

var app = angular.module('app', []);

app.factory('userSvc', function() {
  // mock $http lookup
  var lookupResult = true;

  return {
    hasLiked: lookupResult
  };
});

app.controller('MainCtrl', function($scope, userSvc) {
  $scope.hasLiked = userSvc.hasLiked;
});