成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

路由

Aklman / 549人閱讀

摘要:由命名路由與子路由構(gòu)成整體結(jié)構(gòu),我們用它構(gòu)建如下頁(yè)面。以下兩張圖說明路由和子路由是如何工作的。繼續(xù)修改好友信息的路由部分添加好友信息為組件添加動(dòng)態(tài)路由為動(dòng)態(tài)路由添加為路徑參數(shù)添加數(shù)據(jù)下發(fā)為組件添加,并使用它。

不使用vue-router的情況

代碼
官方給出下面的例子在不使用vue-router的情況下來實(shí)現(xiàn)一個(gè)路由。
該示例結(jié)合了H5歷史管理API、單文件組件、JS模塊相關(guān)內(nèi)容來實(shí)現(xiàn)路由

后面說的頁(yè)面只是一條瀏覽器歷史記錄,關(guān)于歷史記錄管理見歷史記錄管理(window.history)
simple_router.js為入口,進(jìn)行組件的加載,和其他一些功能初始化工作。

//simple_router.js
data: {
    currentRoute: window.location.pathname
},
computed: {
    ViewComponent() {
        const matchingView = routes[this.currentRoute]
        return matchingView
            ? require("./pages/" + matchingView + ".vue").default
            : require("./pages/404.vue").default
    }
},
render(h) {
    return h(this.ViewComponent)
}

屬性currentRoute是一個(gè)狀態(tài)轉(zhuǎn)換器(在VLink.vue中改變狀態(tài)),在下層組件中通過改變它來隨時(shí)切換頁(yè)面。它在轉(zhuǎn)換頁(yè)面前,會(huì)去路由表中查找對(duì)應(yīng)的頁(yè)面路徑。

routes.js為路由表

//routes.js
export default {
    "/":"Home",
    "/about":"About"
}

每個(gè)路由的頁(yè)面都是一個(gè)組件,切換頁(yè)面就是在這些組件中切換。要來回切換這些組件需要先加載它們,我們?cè)?b>ViewComponent計(jì)算屬性中完成這個(gè)工作,通過currentRoute定位好對(duì)應(yīng)的組件,在通過require(組件路徑).default在運(yùn)行時(shí)動(dòng)態(tài)的加載它,并在渲染函數(shù)中使用它。

特別注意的是,如果你使用vue-loader@1.4+版本,這個(gè)require后面要加上default,否則報(bào)個(gè)加載模板失敗的錯(cuò)誤,因?yàn)樵谶@個(gè)版本及更高版本上,vue文件導(dǎo)出的全是esModule,而require加載的是commonjs格式的模塊,在這里具體就是它返回的是一個(gè)包含default的對(duì)象的對(duì)象。
具體查看vue-loader API esModule選項(xiàng)、ES6入門模塊部分、記升級(jí)vue-loader版本時(shí)遇到的一個(gè)坑

這里入口中最重要的是別忘了,使用window.onpopstate管理歷史記錄,激活后退按鈕的功能

window.addEventListener("popstate", () => {
    app.currentRoute = window.location.pathname
})

之后就是定義需要切換的幾個(gè)組件,Home.vue、About.vue404.vue,它們大同小異




這些組件通過Main.vue完成具體的布局




接著就是在Main.vue中使用子組件VLink.vue




VLink.vue很也是很關(guān)鍵,定義了一個(gè)鏈接,在開始入口文件中的currentRoute 這個(gè)狀態(tài)轉(zhuǎn)換器,就是通過點(diǎn)擊鏈接改變狀態(tài)的,而這個(gè)改變值this.href是通過布局組件Main.vueProps數(shù)據(jù)下發(fā)下來的(),最后別忘記把這個(gè)新狀態(tài)作為URL推入歷史記錄管理的狀態(tài)棧中。

總結(jié)下就是 通過simple_router.js定義如何加載頁(yè)面(運(yùn)行時(shí)動(dòng)態(tài)加載),通過VLink.vue觸發(fā)這個(gè)加載,通過布局文件將這兩部分結(jié)合在一起。其中夾雜了歷史記錄的管理。
使用vue-router的情況

該插件整體結(jié)構(gòu)比較簡(jiǎn)單,而細(xì)節(jié)非常繁瑣(用來解決各種各樣的缺陷和bug)。

命名路由子路由構(gòu)成整體結(jié)構(gòu),我們用它構(gòu)建如下頁(yè)面。

目錄結(jié)構(gòu)如下

代碼在這vue-router v0.1

//router.js
export default new VueRouter({
    routes: [
        { path: "/", component: Home },
        {
            path: "/settings", component: UserSettings,
            children: [
                { 
                    path: "userinfo", 
                    component:UserInfo
                },
                {   
                    path: "useremail", 
                    component:UserEmail
                }
            ]
        },
        {
            path: "/interaction", component: UserInteraction,
            children: [
                { path: "userfriend", component: UserFriend },
                { path: "userFollow", component: UserFollow}
            ]
        }
    ]
})

頂層路由及其對(duì)應(yīng)的組件


vue-router 測(cè)試頁(yè)



第二層路由(子路由)及其對(duì)應(yīng)組件,這里。

以下兩張圖說明路由和子路由是如何工作的。

第一張圖說明當(dāng)我們點(diǎn)擊鏈接,經(jīng)過路由就可以把對(duì)應(yīng)的組件,放到頁(yè)面指定的中。而同樣經(jīng)過子路由就可以把對(duì)應(yīng)的組件,放到頂層組件中指定的中。

而第二張,就是對(duì)路由過程的補(bǔ)充,通過路由或子路由去尋找對(duì)應(yīng)組件,找到的組件再反過來放入視圖中。

命名路由

有時(shí)候我們需要在一個(gè)組件中使用多塊,以便增加組件的重用,就可以使用命名路由。

比如我們需要在用戶設(shè)置中的基本信息更換郵箱中都加一段廣告。

增加一個(gè)廣告組件Advertisement.vue


UserSettings.vue中添加一段命名的


在路由文件中為命名的添加命名路由。default路由對(duì)應(yīng)那些未命名的

//router.js
//...
children: [
    { 
        path: "userinfo", 
        components: {
            default:UserInfo,
            //添加命名路由
            adver:Advertisement
        }
    },
    {   
        path: "useremail", 
        components: {
            default:UserEmail,
            //添加命名路由
            adver:Advertisement
        }
    }
]
//...

具體代碼 添加命名路由

為激活的鏈接添加樣式

被激活的鏈接,vue-router會(huì)為其添加樣式類router-link-active,我們?cè)谶@個(gè)class中可以為其添加具體樣式,上面代碼中已經(jīng)被添加了樣式。

a.router-link-active,
li.router-link-active>a {
    background-color: gainsboro;
    color: #37C6C0;
}

這里被分成兩種情況
當(dāng)這種不帶tag的寫法

用戶首頁(yè)

被解析成

tag的寫法

基本信息

被解析成

router-link-active被添加在tag上。

細(xì)心的你可以發(fā)現(xiàn)不管哪個(gè)鏈接被激活,用戶首頁(yè)上始終存在著router-link-active,這是因?yàn)樗穆酚墒?b>/,所以在其他路由被解析時(shí),/也會(huì)被匹配。我們可以用exact解決這個(gè)問題,它使路徑字符串要完全匹配。

用戶首頁(yè)

動(dòng)態(tài)路由模糊匹配

代碼 v0.3 動(dòng)態(tài)路由匹配與Props屬性

有時(shí)候一堆同級(jí)路由它們所對(duì)應(yīng)的組件基本相同,我們就可以使用動(dòng)態(tài)路由,匹配到同一個(gè)組件。
我們?cè)?b>我的好友中有一個(gè)好友列表。當(dāng)點(diǎn)擊某好友會(huì)顯示他的信息。

下面只使用了最簡(jiǎn)單的匹配模式,關(guān)于更復(fù)雜的匹配,vue-router使用path-to-regexp動(dòng)態(tài)匹配請(qǐng)求路徑,具體查看PocketLibs(2)—— 請(qǐng)求相關(guān) path-to-regexp

//router.js
//......
{
    path: "/interaction", component: UserInteraction,
    children: [
        { 
            path: "userfriend", component: UserFriend,
            //添加好友信息 為組件FriendInfo添加動(dòng)態(tài)路由 
            children: [
                { path:"fd/:id",component:FriendInfo}
            ]
        },
        { path: "userFollow", component: UserFollow}
    ]
}
//......

修改組件UserFriend.vue,添加好友列表與好友信息視圖


添加好友信息組件FriendInfo.vue


使用命名組件和Props改進(jìn)我的好友模塊

在剛才的代碼中,UserFriend.vue中有以下代碼

  • 好友{{item}}
  • :to=""/interaction/userfriend/fd/" + item "有點(diǎn)違和。我們可以用命名路由改造一下。
    先在路由文件中為用戶信息對(duì)應(yīng)的路由添加成name屬性,切換成命名路由。

    //router.js
    { 
        path: "userfriend", component: UserFriend,
        //添加好友信息 為組件FriendInfo添加動(dòng)態(tài)路由 
        children: [
            //為動(dòng)態(tài)路由添加name
            { path:"fd/:id",name:"fd",component:FriendInfo}
        ]
    }

    然后修改UserFriend.vue中的

    
    好友{{item}}

    效果與上面的一樣。

    我們?cè)僮屑?xì)看看組件FriendInfo.vue

    
    

    在組件中使用 $route 會(huì)使之與其對(duì)應(yīng)路由形成高度耦合,從而使組件只能在某些特定的 URL 上使用,限制了其靈活性。我們可以為路徑參數(shù)添加Props數(shù)據(jù)下發(fā)。
    繼續(xù)修改好友信息的路由部分

    //router.js
    { 
        path: "userfriend", component: UserFriend,
        //添加好友信息 為組件FriendInfo添加動(dòng)態(tài)路由 
        children: [
            //為動(dòng)態(tài)路由添加name
            //為路徑參數(shù)添加Props數(shù)據(jù)下發(fā)
            { path:"fd/:id",name:"fd",component:FriendInfo,props:true}
        ]
    }

    為組件FriendInfo添加Props,并使用它。

    
    
    在路由中使用Props的其他模式

    如果在命名路由中使用Props數(shù)據(jù)下發(fā),要為每一個(gè)對(duì)應(yīng)組件,都設(shè)置Props。

    {
      path: "/user/:id",
      components: { default: User, sidebar: Sidebar },
      props: { default: true, sidebar: false }
    }

    Props還可以是一個(gè)對(duì)象

    { path:"fd/:id",name:"fd",component:FriendInfo,props:{id:1}}

    還可以是一個(gè)函數(shù),函數(shù)接收一個(gè)$route對(duì)象

    function dynamicPropsFn (route) {
      const now = new Date()
      return {
        name: (now.getFullYear() + parseInt(route.params.years)) + "!"
      }
    }
    //...
    { path: "/dynamic/:years", component: Hello, props: dynamicPropsFn }
    鉤子函數(shù)、請(qǐng)求數(shù)據(jù)和進(jìn)度條

    代碼 vue-router 0.4 鉤子、請(qǐng)求數(shù)據(jù)與全局進(jìn)度條
    我們使用axios發(fā)送請(qǐng)求,http://schematic-ipsum.heroku... 可以作為響應(yīng)模擬一些基本的數(shù)據(jù)。
    改造好友信息組件FriendInfo.vue,我們?cè)诮M件級(jí)鉤子beforeRouteUpdate中發(fā)送請(qǐng)求。

    
    

    beforeRouteEnter鉤子中第三個(gè)參數(shù)next(),調(diào)用它時(shí),才可以繼續(xù)其他操作(此時(shí)系統(tǒng)處于等待),我們?cè)讷@取到響應(yīng)時(shí)再調(diào)用它,因此在獲取響應(yīng)后才會(huì)看渲染效果。

    仔細(xì)觀察可以發(fā)現(xiàn),多次查看好友信息,信息不會(huì)改變,查看控制臺(tái)發(fā)現(xiàn)beforeRouteEnter只調(diào)用了一次,只發(fā)送了一次信息。

    首次查看信息時(shí),解析路由并使組件FriendInfo激活,我們調(diào)用beforeRouteEnter,之后每次查看,組件不會(huì)重新被渲染,只會(huì)被重復(fù)利用,因此不會(huì)再調(diào)用beforeRouteEnter。注意該鉤子中不能使用this,因?yàn)樵趫?zhí)行它時(shí)組件還沒有被實(shí)例,但是next()的回調(diào)執(zhí)行時(shí),組件已被實(shí)例,它接收組件實(shí)例作為參數(shù)(示例中的vm)

    解決這個(gè)問題就靠beforeRouteUpdate,該鉤子在當(dāng)前路由改變,組件被復(fù)用時(shí)調(diào)用。比如從/interaction/userfriend/fd/1/interaction/userfriend/fd/2時(shí)它就會(huì)調(diào)用。下面我們就在FriendInfo中添加這個(gè)鉤子。

    beforeRouteUpdate(to, from, next) {
        axios.post("http://schematic-ipsum.herokuapp.com/", reqObject)
            .then(response => {
                this.name = response.data.name;
                this.phone = response.data.phone;
                this.email = response.data.email;
                next();
            });
    },

    注意它是可以使用this的,它的next()不接收回調(diào)。

    我們看下youtube

    每次加載頁(yè)面會(huì)有個(gè)進(jìn)度條

    我們現(xiàn)在就使用全局鉤子函數(shù)和NProgress實(shí)現(xiàn)這個(gè)功能,在入口app.js文件中添加全局路由鉤子。

    import Vue from "Vue"
    import nprogress from "nprogress"
    import "nprogress/nprogress.css"
    import router from "./router"
    
    const app = function () {
      //在任何導(dǎo)航被觸發(fā)前執(zhí)行
      router.beforeEach((to, from, next) => {
        console.log("beforeEach")
        nprogress.start()
        next()
      })
      //導(dǎo)航中的最后一個(gè)鉤子
      router.afterEach((to, from) => {
        console.log("afterEach")
        nprogress.done()
      })
    
      new Vue({
        router,
        el: "#app"
      })
    }
    
    export { app }

    給路由視圖添加動(dòng)畫

    代碼 vue-router 0.5 為添加動(dòng)畫
    為顯示好友信息添加動(dòng)畫
    修改組件UserFriend

    
    

    添加過渡類

    .child-view {
      position: absolute;
      transition: all 1s cubic-bezier(.55,0,.1,1);
    }
    .slide-left-enter {
      opacity: 0;
      -webkit-transform: translate(60px, 0);
      transform: translate(60px, 0);
    }
    .slide-left-leave-active {
      opacity: 0;
      -webkit-transform: translate(-60px, 0);
      transform: translate(-60px, 0);
    }

    由于在切換查看信息時(shí),組件FriendInfo不會(huì)重新渲染,即除第一次外不會(huì)有動(dòng)畫,因此需要設(shè)置key,這里有個(gè)不可預(yù)期的錯(cuò)誤,即在上設(shè)置key。

    
    

    千萬不能這么做,key無法傳遞給FriendInfo的根節(jié)點(diǎn)。

    我們需要在組件FriendInfo上設(shè)置key

    //FriendInfo.vue
    

    重定向

    代碼 vue-router 0.6 重定向和別名
    仿造我的好友,構(gòu)造關(guān)注的人

    當(dāng)點(diǎn)擊單數(shù)用戶時(shí),顯示用戶信息,點(diǎn)擊雙數(shù)用戶時(shí),顯示用戶被銷毀。
    用戶信息為一個(gè)組件,銷毀為另一個(gè)組件。
    路由配置如下:

    { 
        path: "userFollow", component: UserFollow,
        children: [
            {
                path:"fw/:id", name:"fw",
                redirect: to => {
                    if(to.params.id%2===0)
                        return "fd/:id"
                    else
                        return "fi/:id"
                },
                beforeEnter:(to, from, next) => {
                    console.log(from)
                    console.log(to)
                    next()
                }
            },
            {
                path:"fd/:id", component:UserDestroy, props:true
            },
            {
                path:"fi/:id", component:FollowInfo, props:true
            }
        ]
    }

    每個(gè)routerLink的鏈接路徑為fw/:id,在redirect中配置重定向函數(shù),路徑參數(shù)id為單數(shù)重定向到路由fi/:id,雙數(shù)時(shí),重定向到fd/:idredirect還可以是個(gè)表示路由路徑的字符串或命名路由對(duì)象({name:"foo",params:{bar:"baz"}})。

    另外在redirect屬性所在的路由中,導(dǎo)航守衛(wèi)不會(huì)執(zhí)行,如上面的beforeEnter不會(huì)執(zhí)行(全局的守衛(wèi)也不會(huì)執(zhí)行)。

    別名

    我們?cè)黾右粋€(gè)頂級(jí)導(dǎo)航系統(tǒng)公告

    為它添加路由

    {
        path: "/notification", component: SystemNotification
    }

    SystemNotification組件只是一個(gè)簡(jiǎn)單的標(biāo)題

    之后我想把這個(gè)頁(yè)面改成我的消息頁(yè)面

    為此我們修改路由路徑/usermessage,將原來的名字配置為別名alias:"/notification",并保持routerLink的路徑不變。

    這樣做一是其他網(wǎng)站引用該頁(yè)面不會(huì)產(chǎn)生404,二是路由內(nèi)部配置引用該路由也不會(huì)找不到。

    {
        path: "/usermessage", component: SystemNotification, alias:"/notification"
    },
    滾動(dòng)行為

    代碼 vue-router 0.7 滾動(dòng)行為
    我的消息中配置路由及其視圖,如下圖:

    配置4個(gè)路由及其對(duì)應(yīng)組件

    我的消息

    系統(tǒng)消息 好友消息 用戶組消息 其他消息
    path: "/usermessage", component: SystemNotification, alias: "/notification",
    children: [
        { path: "system-msg", component: SystemMessage, meta: { scrollToTop: false } },
        { path: "friend-msg", component: FriendMessage, meta: { scrollToTop: true } },
        { path: "group-msg", component: GroupMessage, meta: { scrollToTop: true } },
        { path: "other-msg", component: OtherMessage, meta: { scrollToTop: true } }
    ]

    四個(gè)組件中定義一系列字符串列表。在其中插入下一個(gè)消息列表的routerLink,如

    效果如下

    使用歷史記錄回退時(shí),保持原紀(jì)錄位置,是正常的。但點(diǎn)擊鏈接,跳到新頁(yè)面,也是原來位置,這不是我們預(yù)期的行為,我們使用路由屬性scrollBehavior解決這個(gè)問題。它與屬性routes是同一級(jí)別的屬性。

    //router.js
    scrollBehavior(to, from, savedPosition) {
        if (savedPosition) {
            return savedPosition
        } else {
            const position = {}
            if(to.hash) {
                position.selector = to.hash
                if(to.hash === "#anchor") {
                    position.offset = { y: 100 }
                }
            }
            if (to.matched.some(m => m.meta.scrollToTop)) {
                position.x = 0
                position.y = 0
            }
            return position;
        }
    }

    為了后面定位到錨點(diǎn),我們改造FriendMessage,為鏈接到下一個(gè)消息列表的連接添加hash#anchor

  • 用戶組消息
  • 修改GroupMessage

    • 用戶組消息{{item}}
    • 用戶組消息30
    • 用戶組消息{{item+30}}
    • 其他消息
    • 用戶組消息{{item+50}}

    scrollBehavior接收3個(gè)參數(shù)to、fromsavedPosition。以上函數(shù)中savedPosition當(dāng)且僅當(dāng) popstate 導(dǎo)航 (通過瀏覽器的 前進(jìn)/后退 按鈕觸發(fā)) 時(shí)可用,這里與默認(rèn)的效果沒區(qū)別。我們獲取to路由的元數(shù)據(jù)meta.scrollToTop(保存自定義的數(shù)據(jù)),當(dāng)為true時(shí)我們切換到to對(duì)應(yīng)的頁(yè)面時(shí),我們定位到{x:0,y:0},否則保持默認(rèn)行為。如果to存在hash,設(shè)置{selector:to.hash}定位到錨點(diǎn),可以具體定位錨點(diǎn)定位的偏移量{selector:to.hash,offset:{y:100}}。

    History模式

    code 0.8

    在以上所有的請(qǐng)求路徑都帶#,這不是我們所期望的,但是可用于所有的瀏覽器,這種模式為默認(rèn)的hash模式,如:

    http://localhost:8080/#/settings/useremail

    現(xiàn)在使用history模式,設(shè)置屬性mode

    mode:"history",
    routes: [/*...*/],
    scrollBehavior(to, from, savedPosition) {/*...*/}

    現(xiàn)在路徑就正常了,但它只能用于支持H5 History API的瀏覽器。

    http://localhost:8080/settings/useremail

    History API需要服務(wù)器的支持,否則當(dāng)重載頁(yè)面時(shí),會(huì)發(fā)生404頁(yè)面找不到,就像下面這樣。

    這里使用webpack-dev-server,設(shè)置webpack的devServer.historyApiFallback為true,使其支持History API。如

    devServer: {
        historyApiFallback:true,
        noInfo: true
    },

    其他服務(wù)器的配置見官方文檔后端配置例子

    然后又發(fā)現(xiàn)一個(gè)bug,像下面這樣,顯示http://localhost:8080/settings/app.js找不到

    其實(shí)這是個(gè)webpack的問題,插入js資源時(shí),像下面這樣

    它是相對(duì)于當(dāng)前請(qǐng)求的路徑,為了解決這個(gè)問題,我們要在webpack中設(shè)置output中的publicPath屬性為/

    output: {
        path: path.resolve(__dirname, "./dist"),
        publicPath: "/",
        filename: "[name].js",
    },

    它在所有資源前加上虛擬路徑/app.js就變?yōu)榻^對(duì)路徑localhost:8080/app.js,這下就沒什么問題了。

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/94100.html

    相關(guān)文章

    • Angular路由導(dǎo)航的7個(gè)步驟

      摘要:路由過程的個(gè)步驟每次點(diǎn)擊鏈接或?yàn)g覽器改變時(shí),路由器都會(huì)確保應(yīng)用程序做出相應(yīng)的反應(yīng)。一旦所有的都已完成,其返回值是合并的路徑的然后路由器繼續(xù)步驟。你可以使用助記記住路由器經(jīng)過的步驟的順序。 路由過程的7個(gè)步驟 每次點(diǎn)擊鏈接或?yàn)g覽器URL改變時(shí),Angular路由器都會(huì)確保應(yīng)用程序做出相應(yīng)的反應(yīng)。 為了做到這一點(diǎn),Angular路由器執(zhí)行以下7個(gè)步驟的順序: 解析(Parse):它解析...

      BLUE 評(píng)論0 收藏0
    • RouteReuseStrategy angular路由復(fù)用策略詳解,深度刨析路由復(fù)用策略

      摘要:一個(gè)路由復(fù)用策略用例下面貼一個(gè)路由復(fù)用策略用例,應(yīng)該是滿足大部分人的業(yè)務(wù)要求,注意事項(xiàng)只能是末級(jí)路由的緩存,且路由切換的時(shí)候路由節(jié)點(diǎn)上的不能超過兩個(gè)。 關(guān)于路由復(fù)用策略網(wǎng)上的文章很多,大多是講如何實(shí)現(xiàn)tab標(biāo)簽切換歷史數(shù)據(jù),至于如何復(fù)用的原理講的都比較朦朧,代碼樣例也很難適用各種各樣的路由配置,比如懶加載模式下多級(jí)嵌套路由出口網(wǎng)上的大部分代碼都會(huì)報(bào)錯(cuò)。我希望能通過這篇文章把如何復(fù)用路由...

      wendux 評(píng)論0 收藏0
    • 路由表】什么是路由

      摘要:默認(rèn)路由表不允許刪除編輯,默認(rèn)路由表中的規(guī)則均為系統(tǒng)路由。路由表生效粒度為子網(wǎng)。每個(gè)子網(wǎng)必須要綁定且只能綁定一張路由表,一張路由表可被多個(gè)子網(wǎng)綁定。每張路由表最多支持條自定義路由規(guī)則。路由表簡(jiǎn)介名詞解釋默認(rèn)路由表:創(chuàng)建VPC時(shí)系統(tǒng)默認(rèn)為VPC創(chuàng)建的路由表。新創(chuàng)建的子網(wǎng)將默認(rèn)綁定默認(rèn)路由表。默認(rèn)路由表不允許刪除、編輯,默認(rèn)路由表中的規(guī)則均為系統(tǒng)路由。自定義路由表:用戶自主創(chuàng)建的路由表,并可自定...

      Tecode 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    閱讀需要支付1元查看
    <