2014-04-28 79 views
1

我在一個非常簡單的聊天應用程序中使用Firebase。我現在正在處理的功能之一是能夠在聊天室中更新消息,但只有當您是原作者時才能更新。對於編輯我有一個圖標,點擊時,將做一些JavaScript來隱藏消息div和顯示一個先前隱藏的具有更新形式的div。但是,如果你是這封郵件的作者,我只希望它可以使用。這裏是代碼的樣子:如何比較AngularJS值與Ruby on Rails變量值

<li class="message phm pvm pull-left" ng-repeat="(msgId,msg) in room.messages"> 
    <div class="message-current" data-message-id="{{msgId}}"> 
    <span class="message-author pull-left">{{msg.author}}</span> 
    <span class="message-body pull-left pls">{{msg.body}}</span> 
    <span class="message-timestamp pull-right prs"> 
     {{msg.timestamp | date:'MMM d, yyyy h:mm a'}} 
     <a class="message-update-link" href="#" ng-click="showMessageUpdate(msgId)"><span class="glyphicon glyphicon-pencil"></span></a> 
    </span> 
    </div> 
    <div class="message-update hidden" data-message-id="{{msgId}}"> 
    <form class="form-inline" ng-submit="updateMessage(roomId, msgId, '<%= current_user.full_name %>')"> 
     <textarea class="form-control update-message" ng-model="msg.body" ng-trim="false">{{msg.body}}</textarea> 
     <input class="button button-large button-primary" type="submit" value="Update"> 
    </form> 
    </div> 
</li> 

現在,我只能得到它具有可更新消息的所有消息或沒有消息。基本上,我堅持的部分是檢查{{msg.author}}的angularjs值是否等於<%= current_user.id %>的rails值。有關如何實現這一目標的任何想法?謝謝你的幫助!

求助:
感謝Jiten的正確方向邁出的一步。我是學習AngularJS的新手,它非常複雜。有時你只需要知道從哪裏開始。

我結束了使用ngIf指令和angular.equals函數的組合。在我的Rails視圖中,我只使用ng-if="isAuthor(msg.author, '<%= current_user.full_name %>')"來處理任何我想要的消息的作者。這將評估isAuthor()的響應,並且只有在評估爲true時才呈現給dom。現在上面的代碼看起來是這樣的:

<li class="message phm pvm pull-left" ng-repeat="(msgId,msg) in room.messages"> 
    <div class="message-current" data-message-id="{{msgId}}"> 
    <span class="message-author pull-left">{{msg.author}}</span> 
    <span class="message-body pull-left pls">{{msg.body}}</span> 
    <span class="message-timestamp pull-right prs"> 
     {{msg.timestamp | date:'MMM d, yyyy h:mm a'}} 
     <a ng-if="isAuthor(msg.author, '<%= current_user.full_name %>')" class="message-update-link" href="#" ng-click="showMessageUpdate(msgId)"><span class="glyphicon glyphicon-pencil"></span></a> 
    </span> 
    </div> 
    <div ng-if="isAuthor(msg.author, '<%= current_user.full_name %>')" class="message-update hidden" data-message-id="{{msgId}}"> 
    <form class="form-inline" ng-submit="updateMessage(roomId, msgId, '<%= current_user.full_name %>')"> 
     <textarea class="form-control update-message" ng-model="msg.body" ng-trim="false">{{msg.body}}</textarea> 
     <input class="button button-large button-primary" type="submit" value="Update"> 
    </form> 
    </div> 
</li> 

這裏是isAuthor()看起來像我的AngularJS控制器:

$scope.isAuthor = function(msgAuthor, currentUser) { 
    return angular.equals(msgAuthor, currentUser); 
} 

漂亮其實很簡單!

回答

1

比較兩個對象,你可以使用:

angular.equals({{msg.authorId}}, <%= current_user.full_name %>) 
+0

在我上面的代碼方面,其中將在該行去? – ryanpitts1

+0

抱歉,我不確定,我也在學習角色。 – jimagic

+0

哈哈,非常感謝您的幫助,儘管......至少讓我指向一個好的方向! – ryanpitts1