Vuejs基本知識(八)【頁面間的引數傳遞】
在普通的web開發中,引數傳遞有以下幾種形式:
- url:
/another_page?id=3
- 表單:
<form>...</form>
而在Vuejs
中,不會產生表單的提交(這會引起頁面的整體重新整理). 所以有兩種:
url
. 同傳統語言. 引數體現在url
中。- vuejs 內部的機制.(無法在
url
中體現,可以認為是由js
程式碼隱式實現的)
我們用一個實際的例子說明.
我們之前實現了 "部落格列表頁",接下來我們要實現:點選部落格列表頁中的某一行,就顯示部落格詳情頁.
1. 回顧:現有的介面
我已經做好了一個介面: 文章詳情頁。 地址為:
/interface/blogs/show
該介面接收一個引數: id. 使用 http GET請求來訪問。
下面是該介面的一個完整形式:
http://siwei.me/interface/blogs/show?id=1244
下面是返回結果:
{
"result":{
"body":"<p>這個問題很常見,解決辦法就是禁止硬體加速...</p>",
"id":1244,
"title":"android - 在 view pager中的 webview, 切換時,會閃爍的問題。"這個問題很常見,解決辦法就是禁止硬體加速...</p>
}
}
在瀏覽器中看起來如下圖所示:
2. 顯示部落格詳情頁
我們需要新增Vue頁面: src/components/Blog.vue
, 用於顯示部落格詳情.
<template>
<div >
<div>
<p> 標題: {{ blog.title }} </p>
<p> 釋出於: {{blog.created_at }}</p>
<div>
{{ blog.body }}
</div>
</div>
</div>
</template>
<script>
export default {
data () {
return {
blog: {}
}
},
mounted() {
this.$http.get('api/interface/blogs/show?id='+this.$route.query.id).then((response) => {
this.blog = response.body.result
}, (response) => {
console.error(response)
});
}
}
</script>
<style>
</style>
上面程式碼中:
-
data(){ blog: {}}
用來初始化 blog這個頁面用到的變數. -
{{blog.body}}
,{{blog.title}}
等, 用來顯示blog相關的資訊. -
mounted...
中,定義了發起http的請求. -
this.$route.query.id
獲取url 中的id引數. 例如:/my_url?id=333
, 那麼 ‘333’ 就是取到的結果. 具體的定義看下面的路由。
3. 新增路由
修改 : src/router/index.js
檔案. 新增如下程式碼:
import Blog from '@/components/Blog'
export default new Router({
routes: [
// ...
{
path: '/blog',
name: 'Blog',
component: Blog
}
]
} )
上面的程式碼,就是讓Vuejs 可以對形如 http://localhost:8080/#/blog
的url進行處理。 對應的vue檔案是 @/components/Blog.vue
.
4. 修改部落格列表頁–跳轉方式1: 使用事件
我們需要修改部落格列表頁, 增加跳轉事件:
修改:src/components/BlogList.vue
, 如下程式碼所示:
<template>
...
<tr v-for="blog in blogs">
<td @click='show_blog(blog.id)'>{{blog.title }}</td>
</tr>
...
</template>
<script>
export default {
methods: {
show_blog: function(blog_id) {
this.$router.push({name: 'Blog', query: {id: blog_id}})
}
}
}
</script>
在上面程式碼中,
-
<td @click='show_blog(blog.id)'...</td>
表示: 該<td>
標籤在被點選的時候,會觸發一個事件:show_blog
,
並且以當前正在遍歷的 blog物件的id 作為引數. -
methods: {}
是比較核心的方法, vue頁面中用到的事件,都要寫在這裡. -
show_blog: function...
就是我們定義的方法.該方法可以通過@click="show_blog"
來呼叫. -
this.$router.push({name: 'Blog', params: {id: blog_id}})
中:this.$router
是vue的內建物件. 表示路由.this.$router.push
表示讓vue
跳轉. 跳轉到 name: Blog 對應的vue頁面. 引數是 id: blog_id .
演示
(TODO 這裡的GIF要換成靜態圖片)
開啟“部落格列表頁” ,就可以看到對應的所有文章。然後點選其中一個的標題,就可以開啟對應的文章詳情頁了。
如下圖GIF動畫所示:
不經過HTML轉義,直接列印結果.
我們發現,HTML
的原始碼在頁面顯示的時候被轉義了,如下:
所以,我們把它修改一下,不要轉義:
<template>
.....
<div v-html='blog.body'>
</div>
.....
</template>
上面的 v-html
就表示不轉義.
效果如下圖:
修改部落格列表頁–跳轉方式2: 使用v-link
<router-link>
比起 <a href="...">
會好一些,理由如下:
無論是 HTML5 history
模式還是 hash
模式,它的表現行為一致,所以,當你要切換路由模式,或者在 IE9 降級使用 hash
模式,無須作任何變動。
在 HTML5 history
模式下,router-link
會攔截點選事件,讓瀏覽器不再重新載入頁面。
當你在 HTML5 history
模式下使用 base
選項之後,所有的 to
屬性都不需要寫(基路徑)了。
<td>
<router-link :to="{name: 'Blog', query: {id: blog.id}}">
{{blog.id}}
</router-link>
</td>
然後,就可以看到,生成的HTML
形如:
<a href="#/blog?id=1239" class="">
1239
</a>
點選之後,有同樣的跳轉功能.
感興趣的同學,可以檢視: https://router.vuejs.org/zh-cn/api/router-link.html
相關文章
- Vuejs基本知識(四)【頁面渲染過程 】VueJS
- Flutter:學會在頁面間傳遞引數Flutter
- 微信開發之小程式頁面間如何傳遞引數
- Vuejs基本知識(九)【路由】VueJS路由
- dialog如何向其href指定的頁面傳遞引數?
- 頁面之間傳遞資料
- Vuejs基本知識(十三)【表單的提交】VueJS
- Vuejs基本知識(十)【使用樣式】VueJS
- Vuejs基本知識(五)【檢視中的渲染】VueJS
- Vuejs基本知識(十二)【表單的繫結】VueJS
- Vue3學習(十九) - 使用Vue完成頁面引數傳遞Vue
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- 引數傳遞
- 獲取url中?後面傳遞的引數
- JS的方法引數傳遞(按值傳遞)JS
- Vuejs基本知識(一)【專案資料夾基本結構】VueJS
- 引數的定義和引數的傳遞
- Mybatis引數傳遞MyBatis
- 金蝶雲星空——開啟其他表單編輯頁面並傳遞引數
- Vuejs基本知識(三)【語法簡寫說明】VueJS
- 請求引數的傳遞
- 函式的引數傳遞函式
- Flutter 頁面間資料傳遞(共享)的幾種常用方式Flutter
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- C++引數的傳遞方式C++
- 如何在HarmonyOS NEXT中處理頁面間的資料傳遞?
- vuejs傳遞資料的方法有哪些VueJS
- 引數傳遞方式必須是const引用傳遞
- Python的函式引數傳遞:傳值?引用?Python函式
- Shell學習【引數傳遞】
- linux中main引數傳遞LinuxAI
- 利用閉包傳遞引數
- JavaScript函式傳遞引數JavaScript函式
- out,ref,params引數傳遞
- t-on-click 傳遞引數
- GridView傳遞兩個引數的方法View
- java 傳遞引數的兩種方式Java