[英]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消息時,將其添加到隊列中,當路由更改時,將第一個項目從隊列中取出並將其設置為當前消息。
這是一個演示:
我當時想要實現類似的功能,但實際上想要更多的咆哮風格消息。
我已經更新了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.