Chuyển tới nội dung chính

View

Cú pháp

<zmp-view>

View là container chứa các Page, nằm bên trong App, App có thể có 1 hoặc nhiều View, mặc định mỗi View sẽ kế thừa các routes từ App, tuy nhiên có thể tuỳ chỉnh với mỗi View cụ thể.

View Properties

PropTypeDefaultDescription
initbooleantrueTự động khởi tạo view instance
namestringView name. Giúp truy xuất view instance thông qua zmp.views.[name]
mainbooleanfalseĐặt view trở thành view chính
routerbooleantrueSet false để vô hiệu hóa view router
urlstringView's url mặc định. Nếu không chỉ định, sẽ sử dụng document url
load-initial-pagebooleantrueKhi được bật và không có trang con nào bên trong View. Sẽ tải trang đầu tiên khớp với URL khởi tạo
stack-pagesbooleanfalseNếu được bật thì tất cả các trang trước đó trong navigation sẽ không bị xóa khỏi DOM khi chuyển trang.
allow-duplicate-urlsbooleanfalseCó thể bật tham số này để cho phép tải các trang mới có cùng url với trang "đang hoạt động" trong view.
animatebooleantrueBật hiệu ứng chuyên trang
preload-previous-pagebooleantrueBật/tắt tải trước các trang trước khi truy cập sâu navigation. Nếu sử dụng tính năng "swipe back page" cần bật preloadPreviousPage.
reload-pagesbooleanfalseView sẽ luôn tải lại trang hiện đang hoạt động mà không cần tải trang mới
restore-scroll-top-on-backbooleantruekhi được kích hoạt, sẽ cuộn lê đầu trang khi bạn quay lại trang này
ios-page-load-delaynumber0Độ trễ (tính bằng ms) sau khi trang mới sẽ được tải và chèn vào DOM và trước khi nó được chuyển đổi. Có thể tăng lên một chút để cải thiện hiệu suất. Sẽ chỉ có hiệu lực với theme iOS
md-page-load-delaynumber0Độ trễ (tính bằng ms) sau khi trang mới sẽ được tải và chèn vào DOM và trước khi nó được chuyển đổi. Có thể tăng lên một chút để cải thiện hiệu suất. Sẽ chỉ có hiệu lực với theme MD
aurora-page-load-delaynumber0Độ trễ (tính bằng ms) sau khi trang mới sẽ được tải và chèn vào DOM và trước khi nó được chuyển đổi. Có thể tăng lên một chút để cải thiện hiệu suất. Sẽ chỉ có hiệu lực với theme Aurora
routes-before-enterfunction(context) |arrayFunction (hoặc mảng các functions) sẽ được thực thi trước mỗi route được tải/truy cập. Để tiến hành tải route thì cần gọi resolve. Trường hợp array tất cả function trong mảng cần được resolved.Tương tự route beforeEnter nhưng sẽ hoạt động trên tất cả route
routes-before-leavefunction(context) |arrayFunction (hoặc mảng các functions) sẽ được thực thi trước mỗi route khi ngừng tải/thoát. Để tiến hành tải route thì cần gọi resolve. Trường hợp array tất cả function trong mảng cần được resolved.Tương tự route beforeLeave nhưng sẽ hoạt động trên tất cả route
Elements Removal
remove-elementsbooleantrueTrong quá trình chuyển trang Router có thể xóa các Page và Navbar elements không sử dụng khỏi DOM.
remove-elements-with-timeoutbooleanfalseKhi bật router sẽ xóa elements sau timeout
remove-elements-timeoutnumber0Timeout để xóa elements (trường hợp removeElementsWithTimeout: true)
iOS Dynamic Navbar
ios-dynamic-navbarbooleanfalseBật hiệu ứng dynamic navbar trên iOS theme
ios-animate-navbar-back-iconbooleantrueKhi bật back icon sẽ có animation giống với native. Chỉ sử dụng trên dynamic navbar với back-link icon mặc định phía bên trái set với "sliding".
Swipe back
ios-swipe-backbooleantrueBật/tắt khả năng vuốt về bên trái để trở về trang trước. Trên iOS theme
ios-swipe-back-thresholdnumber0Giá trị tính theo px. Swipe back action sẽ bắt đàu nếu "touch distance" lớn hơn giá trị này. Trên iOS theme
ios-swipe-back-active-areanumber30Giá trị tính bằng px. Chiều rộng của cạnh trái màn hình sẽ triggers swipe back action. Trên iOS theme
ios-swipe-back-animate-shadowbooleantrueBật/tắt box-shadow animation khi thao tác swipe back thưc thiện. Có thể tắt nó để cải thiện hiệu suất. Trên iOS theme
ios-swipe-back-animate-opacitybooleantrueBật/tắt opacity animation khi thực hiện swipe back action. Có thể tắt nó để cải thiện hiệu suất. Trên iOS theme
md-swipe-backbooleanfalseBật/tắt khả năng vuốt về bên trái để trở về trang trước. Trên MD theme
md-swipe-back-thresholdnumber0Giá trị tính theo px. Swipe back action sẽ bắt đàu nếu "touch distance" lớn hơn giá trị này. Trên MD theme
md-swipe-back-active-areanumber30Giá trị tính bằng px. Chiều rộng của cạnh trái màn hình sẽ triggers swipe back action. Trên MD theme
md-swipe-back-animate-shadowbooleantrueBật/tắt box-shadow animation khi thao tác swipe back thưc thiện. Có thể tắt nó để cải thiện hiệu suất. Trên MD theme
md-swipe-back-animate-opacitybooleanfalseBật/tắt opacity animation khi thực hiện swipe back action. Có thể tắt nó để cải thiện hiệu suất. Trên MD theme
aurora-swipe-backbooleantrueBật/tắt khả năng vuốt về bên trái để trở về trang trước. Trên Aurora theme
aurora-swipe-back-thresholdnumber0Giá trị tính theo px. Swipe back action sẽ bắt đàu nếu "touch distance" lớn hơn giá trị này. Trên Aurora theme
aurora-swipe-back-active-areanumber30Giá trị tính bằng px. Chiều rộng của cạnh trái màn hình sẽ triggers swipe back action. Trên Aurora theme
aurora-swipe-back-animate-shadowbooleanfalseBật/tắt box-shadow animation khi thao tác swipe back thưc thiện. Có thể tắt nó để cải thiện hiệu suất. Trên Aurora theme
aurora-swipe-back-animate-opacitybooleantrueBật/tắt opacity animation khi thực hiện swipe back action. Có thể tắt nó để cải thiện hiệu suất. Trên Aurora theme
Browser History
browser-historybooleantrueNgười dùng có thể chuyển trang thông qua lịch sử ứng dụng bằng cách sử dụng nút back/forward mặc định của trình duyệt.
browser-history-animatebooleanfalseBật/tắt hiệu ứng chuyển trang khi lịch sử trình duyệt thay đổi
browser-history-on-loadbooleantrueTắt để bỏ qua phân tích cú pháp URL lịch sử trình duyệt và tải trang khi tải ứng dụng
Lưu ý

Tất cả các parameters trên có thể được khai báo trong view property của App để set mặc định cho tất cả views. Ví dụ:

<template>
<zmp-app :v-bind="appParams">
...
</zmp-app>
</template>

<script setup>
const appParams = {
view: {
iosDynamicNavbar: false,
...
}
};
</script>

View Methods & Properties

const view = zmp.views[name];

Sau khi đã có view instance, view instance cung cấp các methods và properties:

| Properties | | ------------------------- | ------------------------------------------------ | | view.app | liên kết đến global app instance | | view.el | View HTML element | | view.$el | ZMP dom instance với view HTML element | | view.name | View name đã được khai báo | | view.main | có phải view chính hay không | | view.routes | Mảng chứa các routes | | view.history | Mảng chứa lịch sử của view | | view.params | Object chứa các parameters khởi tạo | | view.router | Router instance được khởi tạo trong view | | Methods | | view.destroy() | Hủy view instance | | view.on(event, handler) | Thêm event handler. Danh sách các event được hỗ trợ: View Events | | view.once(event, handler) | Thêm event handler và xóa đi sau khi fired | | view.off(event, handler) | Xóa event handler | | view.off(event) | Xóa tất cả event handler của event được chỉ định | | view.emit(event, ...args) | Fire event trên instance |

View Events

Có hai cách để handle event trên view:

  • Sử dụng method on trên view instance: view.on(event, handler)
  • Sử dụng v-on directive của Vue.js trên View component: <zmp-view v-on:[event]="handler">

Swipe-back chỉ khả dụng trên iOS theme.

EventPropDescription
view-init@view:initEvent sẽ được triggered khi khởi tạo view
view-resize@view:resizeEvent sẽ được triggered khi thay đổi kích thước Master (khi masterDetailResizable enabled)
swipeback-move@swipeback:moveEvent sẽ được triggered trong quá trình swipe back di chuyển
swipe-back-before-change@swipeback:beforechangeEvent sẽ được triggered ngay trước swipe back animation tới trang trước khi người dùng thả ra
swipe-back-after-change@swipeback:afterchangeEvent sẽ được triggered ngay sau swipe back animation tới trang trước khi người dùng thả ra
swipe-back-before-reset@swipeback:beforeresetEvent sẽ được triggered ngay trước swipe back animation tới trang hiện tại khi người dùng thả ra
swipe-back-after-reset@swipeback:afterresetEvent sẽ được triggered ngay sau swipe back animation tới trang hiện tại khi người dùng thả ra

Truy cập View Instance

Nếu khởi tạo tự động view instance <zmp-view init>, có thể truy cập instance thông qua:

  • Qua tên của view. Ví dụ đối với <zmp-view name="left">, có thể lấy instance bằng cú pháp zmp.views.left
  • Nếu là main view <zmp-view main>, có thể truy xuất instance thông qua zmp.views.main

Ví dụ

Layout tối giản nhất

<zmp-view main>...</zmp-view>;

{
/* Renders to: */
}

<div className='view view-main'>...</div>;

Với parameters

<zmp-view
main
url='/'
browser-history
:animate="false"
:ios-dynamic-navbar="false"
>
...
</zmp-view>