如何从 url 中的 id 参数创建页面
How to create a page from the id parameter in the url
我正在尝试根据作为参数传递的 ID 创建单个页面。
我的路线结构:
当我将鼠标移到列表中的某个项目上时,我得到了 firebase 文档的 ID,因此我需要创建一个页面来根据文档的 ID 显示文档中的数据。
http://localhost:3000/category/rent/541KqSMHpU17QuYLihFs
id:
541KqSMHpU17QuYLihFs
我的 listItem 组件:
<script>
export let listing
export let id
export let handleDelete
import DeleteIcon from '../../static/assets/svg/deleteIcon.svg'
</script>
<li class="categoryListing">
<a href={`/category/${listing.type}/${id}`} class="categoryListingLink">
<img src={listing.imgUrls[0]} alt={listing.name} class="categoryListingImg" />
<div class="categoryListingDetails">
<p class="categoryListingLocation">
{listing.location}
</p>
<p class="CategoryListingName">
{listing.name}
</p>
<p class="categoryListingPrice">
${listing.offer
? listing.discountedPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')
: listing.regularPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')}
{listing.type === 'rent' ? '/ por mês' : ''}
</p>
<div class="categoryListingInfoDiv">
<img src="/assets/svg/bedIcon.svg" alt="cama" />
<p class="categoryListingInfoText">
{listing.bedrooms > 1 ? `${listing.bedrooms} camas` : `${listing.bedrooms} cama`}
</p>
<img src="/assets/svg/bathtubIcon.svg" alt="banheiro" />
<p class="categoryListingInfoText">
{listing.bathrooms > 1
? `${listing.bathrooms} banheiros`
: `${listing.bathrooms} banheiro`}
</p>
</div>
</div>
</a>
{#if handleDelete}
<DeleteIcon
class="removeIcon"
fill="rgb(231, 76, 60)"
onClick={() => {
handleDelete(listing.id, listing.name)
}}
/>
{/if}
</li>
这里重要的是:
<a href={`/category/${listing.type}/${id}`} class="categoryListingLink">
如何让我的 [listingId] 别名成为 ID 页面?
我的 [listingId].svelte 到目前为止:
<script>
import { page } from '$app/stores'
const listingId = $page.params.listingId
import { db } from '../../../../firebase.config.js'
// get the id parameter from the url
</script>
新年快乐!!
起初我有点难以理解你的问题。
就目前而言,您的 URI 的形状为 /category/id/[listingId]
,因此 http://localhost:3000/category/rent/541KqSMHpU17QuYLihFs
将无法匹配。您需要的是 /category/[id]/[listingId]
形状的 URI。因此,您需要将 id
目录重命名为 [id]
以使其成为动态目录。
然后您将能够像 listingId
:
一样检索 id
<script>
import { page } from '$app/stores'
const { id, listingId } = $page.params
import { db } from '../../../../firebase.config.js'
// do stuff
</script>
以上面的URL为例,id
的值是'rent'
,listingId
的值是'541KqSMHpU17QuYLihFs'
.
希望这能回答您的问题(也祝您新年快乐!)
编辑: [id]
参数的更好、更明确的名称是 [listingCategory]
并且会提高 code/the 的可读性了解您的意图。
我正在尝试根据作为参数传递的 ID 创建单个页面。
我的路线结构:
当我将鼠标移到列表中的某个项目上时,我得到了 firebase 文档的 ID,因此我需要创建一个页面来根据文档的 ID 显示文档中的数据。
http://localhost:3000/category/rent/541KqSMHpU17QuYLihFs
id:
541KqSMHpU17QuYLihFs
我的 listItem 组件:
<script>
export let listing
export let id
export let handleDelete
import DeleteIcon from '../../static/assets/svg/deleteIcon.svg'
</script>
<li class="categoryListing">
<a href={`/category/${listing.type}/${id}`} class="categoryListingLink">
<img src={listing.imgUrls[0]} alt={listing.name} class="categoryListingImg" />
<div class="categoryListingDetails">
<p class="categoryListingLocation">
{listing.location}
</p>
<p class="CategoryListingName">
{listing.name}
</p>
<p class="categoryListingPrice">
${listing.offer
? listing.discountedPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')
: listing.regularPrice.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')}
{listing.type === 'rent' ? '/ por mês' : ''}
</p>
<div class="categoryListingInfoDiv">
<img src="/assets/svg/bedIcon.svg" alt="cama" />
<p class="categoryListingInfoText">
{listing.bedrooms > 1 ? `${listing.bedrooms} camas` : `${listing.bedrooms} cama`}
</p>
<img src="/assets/svg/bathtubIcon.svg" alt="banheiro" />
<p class="categoryListingInfoText">
{listing.bathrooms > 1
? `${listing.bathrooms} banheiros`
: `${listing.bathrooms} banheiro`}
</p>
</div>
</div>
</a>
{#if handleDelete}
<DeleteIcon
class="removeIcon"
fill="rgb(231, 76, 60)"
onClick={() => {
handleDelete(listing.id, listing.name)
}}
/>
{/if}
</li>
这里重要的是:
<a href={`/category/${listing.type}/${id}`} class="categoryListingLink">
如何让我的 [listingId] 别名成为 ID 页面?
我的 [listingId].svelte 到目前为止:
<script>
import { page } from '$app/stores'
const listingId = $page.params.listingId
import { db } from '../../../../firebase.config.js'
// get the id parameter from the url
</script>
新年快乐!!
起初我有点难以理解你的问题。
就目前而言,您的 URI 的形状为 /category/id/[listingId]
,因此 http://localhost:3000/category/rent/541KqSMHpU17QuYLihFs
将无法匹配。您需要的是 /category/[id]/[listingId]
形状的 URI。因此,您需要将 id
目录重命名为 [id]
以使其成为动态目录。
然后您将能够像 listingId
:
id
<script>
import { page } from '$app/stores'
const { id, listingId } = $page.params
import { db } from '../../../../firebase.config.js'
// do stuff
</script>
以上面的URL为例,id
的值是'rent'
,listingId
的值是'541KqSMHpU17QuYLihFs'
.
希望这能回答您的问题(也祝您新年快乐!)
编辑: [id]
参数的更好、更明确的名称是 [listingCategory]
并且会提高 code/the 的可读性了解您的意图。