【问题标题】:Angularjs: Condition statement based on current_userAngularjs:基于 current_user 的条件语句
【发布时间】:2013-10-01 17:28:36
【问题描述】:

我已经坚持了几天了。我想根据当前用户 (id) 显示一个项目。

举个例子:

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

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

如果有帮助,我将 Rails 和 Devise 一起用作我的后端。

【问题讨论】:

  • 开始在js会话中放数据
  • 嗨@apneadiving,我是Angularjs的新手。您能否详细说明或将其键入作为答案。自发布此消息以来,我已经继续创建了一个会话控制器。如果你愿意,我可以在我的问题中编辑它?谢谢

标签: ruby-on-rails angularjs devise


【解决方案1】:

让我们变得简单。

首先,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 对象

【讨论】:

    【解决方案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;
    });
    

    【讨论】:

    • 这里的关键是lookupResult 方法——它仍然需要来自Rails 的current_user 对象,或者至少需要一些关于current_user 的信息。我认为您是对的,让服务检索该信息而不是直接从会话中提取该信息会更加“有角度”,但是您仍然需要知道当前用户的 ID(或一些识别 API 用户的机制)——@apneadiving 的解决方案似乎是一个很好的处理方法。
    猜你喜欢
    • 2017-05-23
    • 2016-12-09
    • 2020-12-29
    • 2017-02-03
    • 2020-10-23
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多