Javascript 在不重新加载控制器的情况下更新路由
我有一个特定汽车id的详细页面, 该页面包含照片列表(由服务返回) 用户可以点击这些照片来查看它们 我想生成一个URL,以便用户可以与所选用户共享页面 默认情况下打开卡片、照片和所选照片 没有必要重新加载页面,因为我已经加载了汽车 我只想在用户单击缩略图时调用该服务以获取所选照片的详细信息 我希望我的解释有助于理解这个问题。这是我的密码Javascript 在不重新加载控制器的情况下更新路由,javascript,angularjs,ngroute,Javascript,Angularjs,Ngroute,我有一个特定汽车id的详细页面, 该页面包含照片列表(由服务返回) 用户可以点击这些照片来查看它们 我想生成一个URL,以便用户可以与所选用户共享页面 默认情况下打开卡片、照片和所选照片 没有必要重新加载页面,因为我已经加载了汽车 我只想在用户单击缩略图时调用该服务以获取所选照片的详细信息 我希望我的解释有助于理解这个问题。这是我的密码 function CarsController($scope, $routeParams, $location, CarsFactory, PhotosFact
function CarsController($scope, $routeParams, $location, CarsFactory, PhotosFactory) {
CarsFactory.get({id: $routeParams.id}).$promise.then(function(car) {
console.log(car);
});
PhotosFactory.query({carId: car.id}).$promise.then(function(photos) {
/*
List all the photos with carId = car.id
and the user can click to see a specific image ($scope.selectPhoto)
*/
});
$scope.selectPhoto = function(photoId) {
/*
clicking on any photo should update
the URL to /cars/{car.id}/{photoId}
I tried with $location.search('photoId', photoId); but it adds a querystring, not a URL segment change.
*/
}
if ($routeParams.photoId) {
PhotosFactory.get({id: $routeParams.photoId}).$promise.then(function(photo) {
console.log('Default photo: ' + photo);
});
}
}
谢谢。在页面中生成链接并在单击图像时显示链接可能会更容易:
<img ng-click="showDiv = !showDiv" src="..." />
<div ng-show="showDiv" >
<a href="/url_part1/{value1}/url_part2/{value2}">link</a>
</div>
要更改url路径(或“段”),可以使用$location.path('/cars/'+car.id+'/'+photoId.).replace()
使用ngRoute处理路由时,Angular应拦截位置更改并防止页面重新加载。路线参数将与
“/cars/:carId/:photoId?”
对齐,其中“?”使最终参数成为可选参数。多亏了.replace()
,用户不必点击后退查看所有照片。这将重新加载控制器,无需执行此操作。这正是我想要避免的(URL更新只是为了生成永久链接),这听起来正是我想要的,但它不起作用。它重新加载页面(我看到,因为我看到网络选项卡中的xhr调用+页面文本字段中输入的文本丢失),我的路线看起来与您发布的“/cars/:carId/:photoId”路线完全相同