2013-10-01 2 views
3

Есть что-то, что я застрял на пару дней. Я хотел бы отобразить элемент на основе текущего пользователя (id).Angularjs: Заявление о состоянии на основе current_user

Для примера:

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

Как использовать условные операторы, основанные на идентификатор текущего пользователя в Angularjs?

Я использую Rails, как мой бэкэнда вместе с Завещания, если это помогает ..

+0

начинают помещать данные в JS сессии – apneadiving

+0

Привет @apneadiving, я новичок в Angularjs. Не могли бы вы рассказать или написать его как ответ. Я пошел вперед и создал контроллер сеансов, после публикации этого. Я могу отредактировать его в своем вопросе, если хотите? Thx – goo

ответ

4

позволяет сделать это легко.

Во-первых, setup gon.

На вашем уровне контроллера Rails, везде, где это необходимо, или в before_filter (before_action в 4 Rails), сделайте следующее:

gon.current_user = { id: current_user.id } 

затем на угловой стороне:

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

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

    factory 
] 

Затем вводит вам услугу сеанса и у вас будет доступ к объекту current_user по методу

2

Если вы хотите, чтобы «Угловой способ» обрабатывался на клипе nt вы можете взглянуть на созданный мной 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; 
}); 
+0

Суть здесь - это метод lookupResult - ему все еще нужен объект current_user из Rails или, по крайней мере, некоторая информация о current_user. Я думаю, вы правы, что было бы более «угловато», чтобы эта информация была получена службой, а не вытащена непосредственно из сеанса *, но * вам все равно нужно знать идентификатор текущего пользователя (или какой-либо механизм идентификации пользователь API) - и решение @ apneadiving похоже на довольно хороший способ справиться с этим. –

Смежные вопросы