成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在 JS 中實現(xiàn) Laravel 的 route 函數(shù)

zhangqh / 2602人閱讀

摘要:所以推薦給每個路由都命個名,并通過路由名的方式來獲取。所以我就考慮能不能在中實現(xiàn)一個類似后端的函數(shù)。最終的解決方案很簡單,兩個函數(shù)就可以搞定。

在Laravel的路由模塊里,我們可以給每一個路由設(shè)定一個名字,比如:

Route::get("/blog/{blog}", "BlogController@show")->name("blog.show");

然后就可以通過 route("blog.show", ["blog" => 1]) 來獲取到這個路由的訪問地址,后端跳轉(zhuǎn)可以用

return redirect()->route("blog.show", ["blog" => 1]);

這樣做的好處是如果發(fā)生url變更,比如我想把/blog/{blog}改成/boke/{blog},只需要改路由文件,別的地方都不用調(diào)整。所以推薦給每個路由都命個名,并通過路由名的方式來獲取。

但這個僅限于后端以及blade模板可以使用,稍微上點(diǎn)規(guī)模的網(wǎng)站都會把js文件多帶帶拎出來,不會把js直接寫在blade模板中,這樣就導(dǎo)致js里發(fā)ajax請求時或者頁面跳轉(zhuǎn)時只能將請求地址寫死,比如

location.href = "/blog/" + id;

這樣萬一路由發(fā)生變更,還得去修改js文件,如果同一個路由被多個js調(diào)用,很容易漏改那么一兩個。

所以我就考慮能不能在js中實現(xiàn)一個類似后端的route函數(shù)。

最終的解決方案很簡單,兩個函數(shù)就可以搞定。

后端部分需要實現(xiàn)一個函數(shù):

function route_uri($name)
{
    return app("router")->getRoutes()->getByName($name)->getUri();
}

這個函數(shù)的作用是根據(jù)路由名稱返回原始的路由地址,比如:

echo route_uri("blog.show"); 
// 會輸出/blog/{blog}

前端也只需要一個函數(shù):

let route = (routeUrl, param) => {
    let append = [];

    for (let x in param) {
        let search = "{" + x + "}";

        if (routeUrl.indexOf(search) >= 0) {
            routeUrl = routeUrl.replace("{" + x + "}", param[x]);
        } else {
            append.push(x + "=" + param[x]);
        }
    }

    let url = "/" + _.trimStart(routeUrl, "/");

    if (append.length == 0) {
        return url;
    }

    if (url.indexOf("?") >= 0) {
        url += "&";
    } else {
        url += "?";
    }

    url += append.join("&");

    return url;
}

注1:ES6語法,如果沒用babel的自行轉(zhuǎn)ES5

注2:這里引用了lodash

這個函數(shù)的作用是:

route("/blog/{blog}", {blog: 1}); //返回 /blog/1
route("/blog/{blog}", {blog: 1, preview: 1}); //返回 /blog/1?preview=1

然后就很簡單了,在blade模板中把這個頁面所有需要用到的路定義在一個對象中:

var routes = {
    blog: {
        show: "{{ route_uri("blog.show") }}",
        update: "{{ route_uri("blog.update") }}",
        destroy: "{{ route_uri("blog.destroy") }}"
    }
};

在js文件里就可以:

$.post(route(routes.blog.update, {blog: 1}), {title: "xxx", content: "xxx"})

用法和后端的route幾乎沒有差別

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21969.html

相關(guān)文章

  • Laravel項目中實現(xiàn)Ajax上傳用戶頭像

    摘要:在編寫程序的過程中,經(jīng)常會遇到一個經(jīng)典的文件上傳場景上傳頭像圖片?;趯ψ詈玫挠脩趔w驗的追求,寫一下之前在項目中實現(xiàn)在項目中的上傳頭像。 在編寫web程序的過程中,經(jīng)常會遇到一個經(jīng)典的文件上傳場景:上傳頭像(圖片)。基于對最好的用戶體驗的追求,寫一下之前在項目中實現(xiàn)在Laravel項目中的Ajax上傳頭像。 1.配置路由 在Laravel的routes.php中設(shè)置路由: Rou...

    shiina 評論0 收藏0
  • Laravel 依賴注入源碼解析

    在 Laravel 的控制器的構(gòu)造方法或者成員方法,都可以通過類型約束的方式使用依賴注入,如: public function store(Request $request) { //TODO } 這里 $request 參數(shù)就使用了類型約束,Request 是類型約束的類型,它是一個類:IlluminateHttpRequest. 本文研究 Laravel 的依賴注入原理,為什么這樣定義...

    Donne 評論0 收藏0
  • Laravel 5.4 入門系列 11. 通過郵件激活注冊用戶

    摘要:我們稍微封裝下代碼吧請您激活賬戶方法用于保存或更新字段方法用于判斷是否在小時之內(nèi)使用管理郵件在剛才的例子中,我們使用的是提供的方法來快速創(chuàng)建和發(fā)送郵件。 使用 Mailtrap 測試郵件功能 Mailtrap 提供了簡單的測試郵件的服務(wù),步驟如下: 登錄網(wǎng)站 Mailtrap 注冊用戶 注冊成功之后,會自動創(chuàng)建一個 demo,點(diǎn)進(jìn)去之后就可以看到配置信息 showImg(https...

    dendoink 評論0 收藏0
  • 前端知識點(diǎn)總結(jié)——Angular

    摘要:前端知識點(diǎn)總結(jié)一概述基于命令行的開發(fā)方式編譯工作集成了打包工具。。。。在瀏覽器中接管展現(xiàn)應(yīng)用的內(nèi)容,并根據(jù)我們提供的操作指令響應(yīng)用戶的交互。在開發(fā)時,八大組成部分模塊組件模板自帶的標(biāo)簽指令綁定相關(guān)的的語法元數(shù)據(jù)告訴如何處理一個類。 前端知識點(diǎn)總結(jié)——Angular 一、Angular概述 基于命令行的開發(fā)方式? ①hot reload ②編譯工作 ③集成了webpack打包工具 。。。...

    BaronZhang 評論0 收藏0
  • Laravel深入學(xué)習(xí)4 - 服務(wù)提供器

    摘要:一個服務(wù)提供器必須包含至少一種方法。服務(wù)提供器一旦被注冊,就可被用于程序的各個地方。注意服務(wù)提供器的變量來自類中。啟動服務(wù)當(dāng)所有的服務(wù)提供器注冊之后,他們就變成了已啟動狀態(tài)。再次提示,把服務(wù)提供器作為一種組織工具來使用。 聲明:本文并非博主原創(chuàng),而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味的翻譯,能保證90%...

    daryl 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<