0

我正在使用 Angular 向控制器发送 JSON 请求,在我的控制器中,我闪现这样的通知:

flash[:notice] = "Toon has been tagged"

在我想使用我的 rabl 模板返回 JSON 响应并包含我的 Flash 通知内容后,如下所示:

object @toon
attributes :id, :uuid, :get_tag_string
if flash
  node(:flash) do |f|
    flash.each do |k, v|
       { :msg => v, :name => k }
    end
  end
end
attributes :errors

我的 Angular 代码处理响应并正确显示 Flash 通知内容。但是问题来了,当页面刷新时,由于我的布局视图中的以下代码,再次显示了 flash 消息:

        <% flash.each do |key, value| %>
        <div class="row-fluid">
            <div class="span8 offset1"><%= content_tag(:div, value, class: "alert alert-#{key} center")%></div>
        </div>
        <% end %>

我可以删除它或在我的控制器中执行 after_filter 来调用 flash.clear 有更好的方法吗?

谢谢!!

4

2 回答 2

1

在我的控制器中使用 flash.now 解决:)

感谢您的回答 Arthur Frankel,喜欢您处理信息的方式

于 2013-09-02T22:50:44.270 回答
1

我也在使用带有rails的angularjs。我处理来自服务器(rails)的错误消息的方式是使用角度路由更改事件。由于您正在处理来自服务器的 Flash 消息,因此它实际上是相同的概念。

在我显示错误的角度应用程序中(在您的情况下是闪烁消息),我使用带有变量的 ng-show,例如,

<div ng-show="showMessages" class="alert">
  {{myMessages}} // obviously here you may have an ng-repeat or similar
</div>

在我的主要角度控制器中,我正在设置 $scope.showMessages(真或假)。在这一点上,这是同样的问题。在我的控制器中,我使用以下回调来查看路由何时更改。更改后,我可以将 $scope.showMessages 设置为 false。

$scope.$on('$routeChangeStart', function (scope, next, current) {
   $scope.showMessages = false;
}

我还使用此 routeChangeStart 事件来处理我希望消息出现在下一页上的时间 - 通过添加另一个 var 来控制“仅在下一页上显示”。

我个人不会回到服务器来清除闪存消息——这看起来很“昂贵”,而你不会被迫进行额外的往返。

于 2013-09-02T22:41:19.813 回答