Framework7(05: Page,路由,頁面刷新)

1.路由器 JS API

Framework7 中的路由器使用非常靈活,他可以有多種方式來處理Page:

  • Ajax Pages,從一個指定的URL 加載頁面,通常是另外一個頁面的文件地址(默認行為)。
  • 通過JS API 創建和加載 動態頁面
  • 如果你的頁面已經寫在DOM中了,那么你可以直接使用 內聯頁面 ,而不用再去加載。
  • 可以加載使用 Template7 編寫的模板
  • 可以在你的應用中混合使用所有上面的這些方法。

視圖是應用中的一個獨立部分,她有自己的設置、頁面切換和瀏覽歷史路由器也是初始化之后的視圖(View)中的一部分,所以你使用路由器之前必須要記得先初始化視圖(使用myApp.addView()方法)

2.視圖中頁面切換相關方法:

在視圖中主要有兩個路由器方法:

  • mainView.router.load(options) - 把一個頁面加載到當前視圖
  • mainView.router.back(options) - 這個方法會觸發一個反向的動畫并回到上一個頁面,也就是瀏覽歷史上的回退

上面這些方法都接受一個options對象作為參數,這個參數有很多屬性。urlcontentcontext 等等。

3.視圖中頁面切換的快捷方式

  • 加載新頁面的方法:
    mainView.router.loadPage(url)- 加載指定的頁面到視圖中。其實和你在頁面中點擊一個鏈接是一樣的效果。
    url - 需要加載的頁面的URL
    mainView.router.loadContent(content)- 把動態生成的內容當做一個頁面加載.
    content - string or HTMLElement or [jQuery/Zepto/DOM7 collection] or [array of HTMLElement] - 需要加載的內容

4.重新加載當前頁面的方法:

  • mainView.router.reloadPage(url) - 重新加載指定的頁面到視圖的當前頁面。同時也會修改視圖的瀏覽歷史,把最后一條記錄替換成指定的URL
    url - 需要加載頁面的URL
  • mainView.router.reloadContent(content)- 重新加載指定的內容到視圖的當前頁面。同時也會修改視圖的瀏覽歷史,把最后一條記錄替換成指定的URL
    content - string or HTMLElement or [jQuery/Zepto/DOM7 collection] or [array of HTMLElement]- 需要加載的內容

5.重新加載上一個頁面的方法(如果視圖的DOM中有兩個頁面):

  • mainView.router.reloadPreviousPage(url)- r重新加載指定的頁面到視圖的上一個頁面。同時也會修改視圖的瀏覽歷史,把最后一條記錄替換成指定的URL

  • mainView.router.reloadPreviousContent(content) - 重新加載指定的內容到視圖的上一個頁面。同時也會修改視圖的瀏覽歷史,把最后一條記錄替換成指定的URL

6.刷新頁面的方法:

  • mainView.router.refreshPage() - 刷新視圖的當前頁面。和你調用.reloadPage
    方法并且傳入當前頁面的URL是一樣的效果
  • mainView.router.refreshPreviousPage() - 刷新視圖的上一個頁面。和你調用.reloadPreviousPage
    方法并且傳入上一個頁面的URL是一樣的效果

7.Ajax頁面
默認情況下 Framework7 會使用 Ajax 加載所有的頁面,除了帶有 external class的鏈接(<a href="somepage.html" class="external">)和沒有正確 href 值的鏈接(比如是空的或者是 #)。

初始化 時候傳遞不同的 ajaxLinks 參數可以改變這個行為。

所以我們如果需要創建一個鏈接指向 about.html,我們只需要按照平時一樣寫 <a>標簽就可以:
<a href="about.html">Go to About page</a>

當我們點擊這個鏈接的時候,Framework7會通過Ajax獲取 about.html,解析它的內容,然后把它插入到DOM中,并且做一個動畫切換到這個新頁面。

  1. Page 內部的結構

因為Framework7有一個非常聰明的解析器,所以在內部頁面中我們不需要完整的HTML結構(head,body,views,pages等)。比如 about.html的內容:

<!-- That is all we have in about.html file -->
<div class="page" data-page="about">
     ... About page content goes here
</div>

重點是,Framework7解析器會嘗試在ajax加載的頁面中尋找 <div class="page">,所以我們不需要完整的HTML結構。當然這不是強制的,你可以寫出完整的頁面結構。

9.多個Page的結構

兩個view應該和主頁中的view有相同的class。這樣Framework7就知道應該哪一個page應該放在哪一個view中。

10.動態導航欄的文件結構

nav回退,

<div class="page" data-page="about">     
    <!-- Just add additional "back" class to link --> 
    <a href="index.html" class="back"> 
        Go back to home page 
    </a>
</div>

關于后退鏈接幾個需要注意的地方:

  • 如果在瀏覽歷史中有頁面,Framework7會忽略掉 href 屬性中的值。
  • 如果在瀏覽歷史中沒有頁面(比如你在首頁點了后退),Framework7會加載href屬性指定的url。你無法改變上述行為。

對后退鏈接來說, href 屬性不是必須得,但是為了向下兼容,最好還是寫上。

11.滑動后退(iOS only)

如果你啟用了 "swipeBackPage" 應用參數,那么你可以通過從左向右滑動來后退到上一個頁面。但是有時候你會想在某些頁面中禁用這個行為,這種情況下你只需要加一個 no-swipeback class 即可。

<div class="page no-swipeback">
     ...
</div> 

12.取消/增加頁面切換動畫

有時候你在加載頁面或者后退的時候需要立刻執行,不想要一個切換的動畫效果,可以通過增加一個 "no-animation" class 在鏈接上即可。

div class="page" data-page="about"> 
    <!-- Add additional "no-anmation" class to link to disable animated page transition --> 
   <a href="about.html" class="no-animation"> 
        Load About page immediately 
   </a>
   <!-- The same rule for back link --> 
   <a href="index.html" class="back no-animation"> 
        Go back immediately 
   </a>
</div>

如果我們已經全局禁用了動畫,但是在某些鏈接上希望啟用這些動畫,那么我們可以給鏈接加上 "with-animation" class。

13.通過 data 標簽配置更多選項

有時候我們希望在某些鏈接上有更多的配置,我們可以使用作為data-屬性來配置所有在 視圖鏈接方法中的參數。
<a href="about.html" data-reload="true" data-ignore-cache="true">Refresh page</a>

14.用javascript加載page,和回退page

15.結論

Framework7 中,頁面之間的鏈接路由都是很簡單的,你只需要記住:

  • 你需要使用普通的 <a>標簽,她有一個href屬性指向你需要加載的頁面。
  • 通過ajax加載的頁面不需要有完整的HTML結構。只需要有 <div class="page"> (和 <div class="navbar"> 如果你需要動態的滾動條)
  • 如果你在同一個文件中有多個Page,把他們用 <div class="view"> 包裹起來,并且給每一個View設置好正確的class
  • 只需給一個鏈接加上 back class (<a href="index.html" class="back">),她就會自動變成一個后退鏈接。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容