簡體   English   中英

在視圖之間傳遞對象(flash消息)

[英]Passing object between views (flash message)

在下面的場景中傳遞消息的最佳方法是什么。

$scope.p.$save的成功場景中,結果包含一條消息( res.message ),我希望在下一個視圖中顯示該消息( $location.path("/test/"+res.reply.Id) )。 沒有AngularJS,我可以在URL中傳遞它或將其保存在會話cookie中。 但是,我想AngularJS可能有更好的方法,因為沒有瀏覽器重定向,狀態應該可用。 實現這一目標的最佳方法是什么?

在rootScope中設置它會在我使用瀏覽器后退按鈕時顯示它,並且消息的范圍應僅用於第一次導航到新視圖。

function NewCtrl(Phone, $location, $rootScope, $scope) {
    $scope.p = new Phone();
    $scope.save = function () {
        $scope.p.$save(
            {},
            function (res) {
                $rootScope.message = res.message **//<-- this will cause message still set when using browser back button, etc**
                $location.path("/test/"+res.reply.Id); **//<-- Req: needs to pass the message to next view**
            }, function (res) {
            //TODO
            }
        );
    };
}
....
PhoneApp.factory('Phone', function ($resource) {
    return $resource('/api/test/:_id')
});

您可以使用在$ routeChangeSuccess上顯示閃存的服務。

每次設置Flash消息時,將其添加到隊列中,當路由更改時,將第一個項目從隊列中取出並將其設置為當前消息。

這是一個演示:

http://plnkr.co/edit/3n8m1X?p=preview

我當時想要實現類似的功能,但實際上想要更多的咆哮風格消息。

我已經更新了Andy提供的優秀plinkr代碼,其中包含一個利用toastr growl風格通知庫的“pop”方法。

我的更新還允許您指定通知類型(信息,警告,成功,錯誤)和標題。

'pop'方法會跳過將消息添加到隊列中,而是立即將其彈出屏幕。 Andy之前的plinkr的set / get功能基本保持不變。

您可以在此處找到我的更新: http//plnkr.co/edit/MY2SXG?p = preview

我不相信有一種方法可以將此默認設置為AngularJS。 您最好的選擇就是通過查詢字符串傳遞消息(編碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM