我在Gallery
组件中有语言代码:
function Gallery(LanguageService) {
var $ctrl = this;
$ctrl.$onInit = function () {
$ctrl.code = LanguageService.language;
_loadGallery($ctrl.code);
}
}
LanguageService
是包含全局语言设置的服务。例如,英语和en
forpolish的代码可以是pl
。从Gallery
我可以移至Image details
组件,其中$onInit
看起来相同 - 从语言中获取代码并加载数据。问题是我可以添加图片翻译,例如德语翻译 - de
,它会更改LanguageService
。然后:
Image
我有德语版Go back
按钮返回图库Gallery
没有德语翻译,我会得到404 Not Found
乍一看,我可以转到Image
州galleryLanguage
:
$state.go("image.details", {id: image.id, galleryLanguage: $ctrl.language});
但是如果没有在image
个状态中进行明确定义,它就会丢失,例如,如果从image.details
我要转到image.edit
,我必须这样做:
$state.go("image.edit", {id: image.id, galleryLanguage: $ctrl.language});
// And if I want to bo back to gallery
function goBackToGallery() {
$state.go(`gallery.details`, {galleryLanguage: $ctrl.galleryLanguage}); //and then in Gallery use it if present
}
当然可以通过额外的服务来完成:
function Gallery(LanguageService, TemporaryService) {
var $ctrl = this;
$ctrl.$onInit = function () {
$ctrl.code = TemporaryService.language? TemporaryService.language : LanguageService.language;
TemporaryService.language = undefined;
_loadGallery($ctrl.code);
}
function goToImageDetails(image) {
TemporaryService.language = String($ctrl.code);
$state.go('image.details', {id: image.id});
}
}
但也许可以使用Angular UI路由器,没有自己的实现?提前感谢您的帮助。
答案 0 :(得分:2)
这可以使用不带参数的ui-route完成。见下面的例子:
方法一:
.state('eventListing', {
url: '/events',
templateUrl: 'views/eventListing.html',
controller: 'eventListing',
resolve: {
category: function() {
return { id: 1 };
}
}
})
在控制器中你可以像访问它一样:
app.controller('eventListing', ['$scope', 'category',
function ($scope, category) {
$scope.categoryId = parseInt(category.id);
}
]);
方法二:
此处您不需要解决,只需使用ui-router状态的数据密钥传递对象,然后使用 $ state.current.data 访问控制器。见下面的例子:
.state('eventListing', {
url: '/events',
templateUrl: 'views/eventListing.html',
controller: 'eventListing',
data: {
id: 1
}
})
在控制器中你可以像访问它一样:
app.controller('eventListing', ['$scope', '$state',
function ($scope, $state) {
$scope.categoryId = parseInt($state.current.data.id);
}
]);
答案 1 :(得分:1)
1-您可以在路线中使用参数选项
.state('about', {
url: '/about?isDraft',
params: {
isDraft: null
}
})
2-您可以按照说明使用服务
3-您可以将数据存储在sessionStorage
中这些是我的选择。