Trang web
Demo
VueJS!

Hãy bắt đầu Góp ý

Ví dụ về Data và Method

Demo ví dụ minh họa Data Method.

Ví dụ 2: Data Computed

Kết quả a + b: {{tinhtong(soa,sob)}}

Ví dụ 3: v-on Click

Giờ hiện tại: {{time}}


Ví dụ 4: v-on Click, v-once

Giờ hiện tại: {{time}}


Ví dụ 5: Raw HTML, HTML

Raw HTML: {{rawHTML}}

V-HTML:

V-BIND

Trong VueJS thường sử dụng những directive hay còn gọi là các thành phần trong VueJS những thành phần này bắt đầu bằng v-

Cú pháp mustache không dùng được bên trong các thuộc tính HTML. Thay vào đó, bạn hãy dùng directive v-bind:

Kích hoạt button

Gia trị của isButtonDisable: {{isButtonDisable}}

Viết tắt v-bind

Ta có thể viết :disabled thay vì v-bind:disabled

Một số v-bind thông dụng

Thuộc tính v-bind:href cho phép ta thêm đường dẫn URL

Thuộc tính v-bind:style Cho phép ta định dạng style bằng VueJS

Thuộc tính v-bind:id cho phép sử dụng thuộc tính id trong VueJS

Tác dụng của việc sử dụng của những thẻ này cho phép ta sử dụng thuộc tính dynamic (thuộc tính động)

Computed property và watcher

ComputedĐược sinh ra sau thực hiện một hàm. Thường thì viết trực tiếp trong template bằng cách gọi trực tiếp trong cặp dấu {{}}, Computed không có tham số truyền vào

BÀI TOÁN CON GIÁP - (COMPUTED)

TÍNH CAN CHI TỪ MỘT NĂM NHẬP TỪ BÀN PHÍM

Con người sinh ra thuộc 12 con giáp: Tý, Sửu, Dần, Mẹo, Thìn, Tị, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi

Đồng thời chúng ta còn 10 thiên can như sau: Canh, Tân, Nhâm, Quý, Giáp, Ất, Bính, Đinh, Mậu và Kỷ

Bài toán nhập vào một năm đưa ra năm đó là nằm gì. Ví dụ như năm 2020 là năm Canh Tý


Năm vừa nhập là năm: {{tinhcan}}

So sánh Computed và Methods

Computed Methods

- KHÔNG có tham số đầu vào. Gọi trong temple chỉ cần ghi {{"tencomputed"}}

- Khi nào có sự thay đổi của data thì computed mới chạy lại

Ví dụ

                        
computed:{
  tinhTong:function(){
  return 1+2;
}

{{ tinhTong + 2 }}
                          
Khi gọi tinhTong+2 thì computed đã được tính lúc trước là kết quả là 3 rồi nên không cần tính lại kết quả ra 4

- có tham số đầu vào. Gọi trong temple phải có dấu (){{"tenmethods(params)"}}

- Sử dụng methodsphải chạy lại từ đầu đến cuối

Ví dụ

                            
methods:{
  tinhTong2:function(){
  return 1+2;
}

{{ tinhTong2() + 2 }}
                          
Khi gọi tinhTong2()+2 thì methods sẽ thực hiện hàm tính tổng trước để ra kết quả là 2 sau đó + 2 tiếp tục kết quả ra là 4

ỨNG DỤNG ĐẶT CÂU HỎI VÀ TRẢ LỜI YES/NO - (WATHCER)

Đặt câu hỏi có dấu "?" sao đó API sẽ trả về kết quả YES/NO

Câu hỏi phải đặt phải có dấu "?""

API trả về kết quả YES/NO

Tôi là Laravel? NO


Câu trả lời: {{answer}}

So sánh Computed và Watcher

Computed Watcher

Muốn giảm tên một thuộc tính phức tạp, lồng nhau thành 1 tên dễ đọc và dễ sử dụng Được cập nhật khi thuộc tính dữ liệu ban đầu bị thay đổi Thuộc tính dữ liệu đạt đến 1 giá trị cụ thể, sau đó được sử dụng vào một việc cụ thể 🡪Cần tham chiếu 1 giá trị từ template

Tạo dữ liệu mới từ dữ liệu hiện có Sắp xếp hoặc thao tác 1 nhóm dữ liệu lớn 🡪Sử dụng các giá trị trực tiếp trong template

>

Other Directive

Phần này trình bày một số directive thông dụng, thường sử dụng nhất.

# V-IF, V-ELSE

Dùng để kiểm tra điều kiện của một câu lệnh


TRÒ CHƠI TÀI XỈU - (V-IF, V-ELSE)

TRÒ CHƠI THỬ THÁCH VẬN MAY BẰNG GAME TÀI XỈU

Luật chơi: Bạn có 5000 đồng. Nếu số tiền của bạn đạt 20000 đồng bạn thắng, số tiền của bạn bằng 0 bạn thua. CHẴN: [2,4,6], LẺ: [1,3,5]

Bạn có thể đặt cược số tiền Bé hơn hoặc bằng số tiền bạn đang có.

Nếu bạn đặt đúng tài hoặc xỉu thì tỉ lệ trả thưởng là 1:1 Ví dụ: Đặt 5000 đồng ĐƯỢC 5000 đồng.

Số tiền của bạn: {{tienhientai}} {{tienhientai}} đồng


KẾT QUẢ:{{ketqua}}

# V-FOR

Dùng để render danh sách, một số tài tiếng anh gọi là map danh sách.

v-for mapping danh sách dựa trên một mảng

Cú pháp duyệt mảng v-for như sau item in items

NHỮNG CÔNG VIỆC CẦN LÀM HÔM NAY
(V-FOR và V-FOR component)

SẮP XẾP CÔNG VIỆC CẦN LÀM CHO NGÀY HÔM NAY
# V-TEXT

Có hai cách để lấy data dạng string cách 1 dùng trực tiếp
<p> {{msg}} </p>

Cách thứ 2: gán msg vào trong v-text
<p v-text="msg"></p>

# V-PRE

Directive V-PRE Cho phép ta ngừng thực thi code js. Lấy ví dụ chúng ta có msg:abc. Giả sử thường ta sử dụng sẽ xuất ra abc. Nhưng trường hợp sử dụng <p>{{msg}}</p> kết quả sẽ trả về {{msg}}

# V-SHOW

v-show cách dùng tương tự như v-if tuy nhiên v-if luôn luôn được render và chứa trong DOM; v-show chỉ bật tắt thuộc tính display của phần tử này.

v-show không hỗ trợ thẻ <template> và không hỗ trợ v-else

COMPONENT BASIC

Component là thành phần của khá quan trọng trong VueJS, nó cho phép ta tạo ra một thẻ <tag> mới của chính mình

Ví dụ 11. Tạo một button mang tên

'lp-button'

Tạo một button có background mã màu ngẫu nhiên khi click. Nếu màu sáng thì chữ màu đen, nếu màu tối thì chữ màu trắng

Giải thuật xác định màu sáng tối

Ví dụ 12. Tái sử dụng Component

'lp-button'

Tái sử dụng component lp-button đã tạo ở ví dụ 1

Giải thuật xác định màu sáng tối

THÀNH PHẦN TRONG VUEJS

Một ứng dụng thường tổ chức dưới dạng cây lồng nhau thường có cấu trúc như sau:

Ví dụ: Trong khu vực chứa các bài blog có danh sách các bài blog là component con -> trong mỗi blog con lại có các component con khác như là hình ảnh, tiêu đề, button,....

Ví dụ 14. Truyền dữ liệu động vào Component

'lp-header'

Nhập mã màu và chuỗi kí tự từ bàn phím

KẾT QUẢ

Ví dụ 15: Một phần tử đơn lập trong component

Vì component chỉ chứa một phần tử Root đơn lập nên ta không thể thể hiện một component như sau

Nhận xét Thẻ <lp-error> bị lỗi do có 2 Root<h1><h2>

Thẻ <lp-success> không bị lỗi vì chỉ có 1 Root<div> chứa 2 tag <h1><h2>

Ví dụ 18. v-model trong component

Sử dụng v-model trong component. Giả sử ta sử dụng <input v-model="searchText"> thì chúng ta sử dụng bình thường, tuy nhiên việc này đối với component cần phải được custom gửi đến đối tượng cha thì chúng ta mới được thay đổi

{{msg}}

Thẻ input bình thường

Cách 2 của thẻ input

Thẻ input dùng component

Ví dụ 19. Phân phối nội dung với <slot>

Hello World

Trong trường hợp có nhiều slot, ta sẽ dùng name đề xác định vị trí bổ xung.

This is success alert

This is danger alert

Ví dụ 20. Phạm vi truy xuất trong <slot>

Có thể truy xuất dữ liệu trong component chứa slot bằng cách khai báo v-bind trong component cha và dùng v-slot khi muốn sử dụng

{{com.name}}

Ví dụ 11. Mixins

Để có thể thêm Data và Methods từ bên ngoài ta sử dụng mixins

{{ msg }}


Với những tuỳ chọn trùng nhau, những tuỳ chọn này sẽ được mergeưu tiên những tuỳ chọn trong component

                     
{{ dt }}
                    
                  

Những hàm hook có tên trùng sẽ được merge vào trong một mảng để tất cả đều được gọi. Những hook trong mixin sẽ được gọi trước những hook trong component.

                     
"This is created() method in mixin !"
"This is created() method in component !"
                    
                  

Local Mixins Global Mixins

Nó bao gồm thành phần mà nó được khai báo và đăng ký. Quyền hạn của mixin cục bộ bị ràng buộc bởi thành phần mà nó được khai báo.

                             
var mixin_cus = {
    created: function () {
        console.log('Hello !')
    }
}

new Vue({
    mixins: [mixin_cus],
})
                            
                        

Nó ảnh hưởng đến tất cả đối tượng Vue được khởi tạo, kể cả những component của bên thứ ba.

                             
Vue.mixin({
  created: function () {
    var myOption = this.$options.myOption
    if (myOption) {
      console.log(myOption)
    }
  }
})

new Vue({
  myOption: 'hello!'
})
// => "hello!"
                          
                        

Enter/Leave & List Transitions

# Overview
  1. Nó cung cấp đa dạng hiệu ứng giao diện khi thêm, xóa, sửa từ DOM
  2. Tự động áp dụng lớp cho CSS transition và CSS animation
  3. Tích hợp thư viện bên thứ 3 như Animate.css
  4. Tích hợp các thư viện hoạt ảnh JavaScript của bên thứ 3, chẳng hạn như Velocity.js
# Chuyển đổi Component/Element đơn lẻ

VueJS cung cấp một component wrapper cho phép xử lý giao diện trong các trường hợp sau

  1. Render có điều kiện sử dụng v-if
  2. Display có điều kiện sử dụng v-show
  3. Component động
  4. Các nút gốc thành phần components

Ví dụ 25:

HELLO LAMPART

# CHÚ Ý

Khi một phần tử chứa trong component transition được thêm vào hoặc gỡ bỏ khỏi DOM, các bước sau đây sẽ diễn ra:

  1. Vue sẽ tự phát hiện ra nếu phần tử đang nhắc đến có CSS transition hoặc animation và thêm/bớt các class CSS transition vào đúng thời điểm.

  2. Nếu component cung cấp hook JavaScript, các hook này sẽ được gọi vào đúng thời điểm.

  3. Trong trường hợp không tìm thấy transition hoặc animation nào trong CSS và cũng không có hook JavaScript nào, việc thêm vào hoặc gỡ bỏ khỏi DOM sẽ được thực thi ngay trong frame tiếp theo

Mỗi class trên đây sẽ có prefix (tiếp đầu ngữ) là tên của transition. Ở đây prefix v- là mặc định khi bạn dùng một thẻ <transition> không có tên. Nếu chẳng hạn bạn dùng <transition name="my-transition"> thì class v-enter sẽ trở thành my-transition-enter.

v-enter-activev-leave-active cho phép bạn dùng các hàm easing khác nhau cho các enter/leave transition

Sự khác nhau giữa CSS-Transition và CSS-Animation

CSS-Transition CSS-Animation

Xin chào

Cân đẩu vân

# CÁC CLASS TRONG TRANSITION - VÀ MÔ HÌNH THỰC HIỆN

VueJS cung cấp các class trong Transitions gồm những 6 class cho enter/leave transition

  1. v-enter: Trạng thái bắt đầu của enter. Được áp dụng trước khi phần tử được thêm vào DOM và gỡ bỏ đi một frame sau đó.
    Tham khảo về Frame

  2. v-enter-active Trạng thái active của enter. Được áp dụng trong suốt quá trình enter, từ ngay sau khi phần tử được thêm vào DOM cho đến khi transition/animation kết thúc. Class này có thể được dùng để định nghĩa duration, delay, và hàm easing cho transition enter.

  3. v-enter-to: 2.1.8+. Trạng thái kết thúc của enter. Áp dụng một frame sau khi element được thêm vào DOM (cùng lúc với việc v-enter được gỡ bỏ), gỡ bỏ đi khi transition/animation kết thúc

  4. v-leave: Trạng thái bắt đầu của leave. Được áp dụng ngay khi một leave transition được kích hoạt và gỡ bỏ đi một frame sau đó.

  5. v-leave-active: Trạng thái active của leave. Được áp dụng trong suốt quá trình leave, từ khi transition được kích hoạt cho đến khi transition/animation kết thúc. Class này có thể được dùng để định nghĩa duration, delay, và hàm easing cho leave transition.

  6. v-leave-to: 2.1.8+. Trạng thái kết thúc của leave. Áp dụng một frame sau khi leave transition được kích hoạt (cùng lúc với việc v-leave được gỡ bỏ), gỡ bỏ đi khi transition/animation kết thúc.
# SỬ DỤNG CLASS TÙY BIẾN - GIỐNG STYLE TRONG CSS

Chúng ta cũng có thể tùy biến transition trong trực tiếp tag transition thay vì định nghĩa trong class qua các thuộc tính sau đây:

  • enter-class
  • enter-active-class
  • enter-to-class (2.1.8+)
  • leave-class
  • leave-active-class
  • leave-to-class (2.1.8+)

Các thuộc tính này sẽ override những tên class theo thông lệ của Vue. Điều này đặc biệt có ích khi bạn muốn kết hợp giữa hệ thống transition của Vue và một thư viện CSS animation có sẵn như Animate.css.

Ví dụ

Thú nhún

COMPONENT ADVANCED

Component Advanced chứa những kiến thức component nâng cao hơn như Routing, Render Function, Virtual Dom, Reactive Interface

Tất tần tật về Routing

Bản thân VueJS không cung cấp tính năng tự xây dựng route tuy nhiên để làm được việc này chúng ta cần cài đặt thêm một package vue-router


# CÀI ĐẶT BẰNG NPM

                  npm install vue-router 

# Copy đoạn script này vào vị trí chứa script đối với project VueJS

                import {router} from './router'
                  /*Phải thêm router vào*/
                  new Vue({
                    ...
                    router,
                    render: h => h(App)
                  }).$mount('#app')      
                
              

# Thêm đoạn code về router trong thư mục router/index.js giống như code minh họa:

                
                  import Vue from 'vue'
                  import Router from 'vue-router'
                  import Overview from '@/components/Overview'
                  import Feature from '@/components/Feature'
                  import Theme from '@/components/Theme'
  
                  Vue.use(Router)
  
                  export const router = new Router({
                    mode: 'history',
                    routes: [
                      {
                        path: '/overview',
                        name: 'Overview',
                        component: Overview
                      },
                      {
                        path:'/feature',
                        name:'feature',
                        component: Feature
                      },
                      {
                        path:'/theme',
                        name:'theme',
                        component: Theme
                      },
                  
                    ]
                  })
                
              

# Sử dụng Router - Định nghĩa Routing trong HTML

                
                  <div>
                  <router-link to="/overview"><v-btn rounded style="margin:10px; box-shadow: 0px 0px;" color="#fff0"><span
                  style="color:white"> Overview - Setting </span></v-btn></router-link>
                  </div>
                  <div>
                  <router-link to="/feature"><v-btn rounded style="margin:10px; box-shadow: 0px 0px;" color="#fff0"><span
                  style="color:white"> Feature </span></v-btn></router-link>
                  </div>
                  
                  <div>
                  <router-link to="/theme"><v-btn rounded style="margin:10px; box-shadow: 0px 0px;" color="#fff0"><span
                  style="color:white"> Style & animations </span></v-btn></router-link>
                  </div>
                  
                  <div>
                  <router-link to="/UI"><v-btn rounded style="margin:10px; box-shadow: 0px 0px;" color="#fff0"><span
                  style="color:white">UI Comoponent </span></v-btn></router-link>
                  </div>
                
              

# Thêm Router View sau khi định nghĩa các đường link là nơi chứa các component router

                
                  <router-view></router-view>
                
              

Ví dụ 29. Hiển thị tiêu đề có kích thước khác nhau với một component

Heading 1 Heading 2 Heading 3 Heading 4

Node và Trees

Code HTML được hiển thị động bằng việc render một cây các đối tượng được gọi là DOM tree.

Mọi phần tử trên DOM tree là một Node. Mỗi Node là một phần hiển thị trên trình duyệt.

Ví dụ đoạn HTML:

                
<div>
  

Bài đồng dao

Năm mới năm me <!-- TODO: Hoàn thành bài đồng dao --> </div>

Cấu trúc cây đoạn HTML trên:

Virtual DOM

Vue sẽ tự động giữ cho trang web được cập nhật nhờ vào việc xây dựng một virtual DOM để theo dõi tất cả những thay đổi cần thực hiện đối với DOM thật.

Ta có thể tạo ra một virtual DOM bằng createElement

JFX

Thay vì phải cực nhọc khi dùng nhiều hàm render:

                  
createElement(
  'anchored-heading', {
    props: {
      level: 1
    }
  }, [
    createElement('span', 'Hello'),
    ' world!'
  ]
)
                  
                

Vue cung cấp một plugin dành cho Babel để dùng JSX với Vue, giúp chúng ta sử dụng một cú pháp gần gũi hơn với template:

                  
import AnchoredHeading from './AnchoredHeading.vue'

new Vue({
  el: '#demo',
  render: function (h) {
    return (
      <AnchoredHeading level={1}>
        <span>Hello</span> world!
      </AnchoredHeading>
    )
  }
}))
                  
                

Dùng h thay cho createElement là bắt buộc đối với JSX.

Reactive Interface

Vue không cho phép thêm hay xoá trực tiếp các thuộc tính:

                  
var vm = new Vue({
  data: {
    a: 1
  }
})
// `vm.a` is now reactive

vm.b = 2
// `vm.b` is NOT reactive
                  
                

Để có thể thực hiện điều đó Vue.setVue.delete để thêm, sửa đổi hoặc xoá.

LIÊN HỆ VỚI CHÚNG TÔI

QMPP+W3 Quận 3, Thành phố Hồ Chí Minh, Việt Nam

(+84 0) 28-3990-3296 (+84 0) 28-3990-3297

Your message has been sent. Thank you!