Giới thiệu framework Vue.js

Công Nghệ
Giới thiệu framework Vue.js

Bài viết được sự cho phép của tác giả Kien Dang Chung

Trong thời gian gần đây, công đồng lập trình web thường nhắc đến một framework có tên Vue.js cũng như bàn luận rất nhiều về các ưu điểm của nó khi so sánh với các framework đã có mặt từ rất lâu như jQuery, React (được hỗ trợ bởi Facebook), Angular (được hỗ trợ bởi Google)… Vậy Vue.js là gì? tại sao nó phát triển một cách mạnh mẽ như vậy, câu trả lời có trong phần tiếp theo.

Xem thêm các chương trình tuyển dụng Vue.js hấp dẫn trên Station D

Vue.js là gì?

Vue (phiên âm /vjuː/, đọc giống như từ view) là một framework Javascript tiên tiến trong xây dựng giao diện người dùng, không giống như các framework khác, Vue được xây dựng từ những dòng code cơ bản nhất nhằm tối ưu tốc độ. Thư viện của Vue chỉ tập trung vào lớp hiển thị, rất đơn giản để tiếp cận và dễ dàng tích hợp vào các hệ thống khác. Vue cũng có khả năng cung cấp các ứng dụng web đơn trang Single Page Application (toàn bộ website chỉ là một trang) cho phép kết hợp với nhiều các công cụ hiện đại, như Laravel chẳng hạn.

Vue.js được sử dụng để xây dựng giao diện người dùng giống như React (sử dụng bởi Facebook), Angular (được hậu thuẫn bởi Google), Ember… Tuy nhiên, Vue.js có tốc độ tạo trang (render) rất nhanh và chiếm khá ít bộ nhớ. Chúng ta có thể xem bảng benchmark các framework Javascript nổi tiếng nhất hiện nay, Vue có một thứ hạng không tồi chút nào.

Bảng đánh giá các Javascript framework năm 2017Bảng đánh giá các Javascript framework năm 2017

Vue.js mới chỉ ra mắt năm 2015, nhưng Vue.js đã sớm khẳng định mình và sớm trở thành người thay thế Angular và React, đây cũng chính là lý do Laravel giới thiệu Vue.js trong thiết lập mặc định.

Mô hình MVVM

MVVM là viết tắt của Model-View-ViewModel là một mô hình được áp dụng trong framework Vue.js.

Mô hình MVVM trong Vue.jsMô hình MVVM trong Vue.js

Trong mô hình này, dữ liệu mỗi khi được “gán” vào View hoặc Model sẽ đều được Vue.js tự động gắn cho phần còn lại. Tức là khi dữ liệu thay đổi ở Model nó sẽ tự động được “cập nhật” sang View và khi người dùng thay đổi dữ liệu trên View (ví dụ nhập liệu vào ô địa chỉ email chẳng hạn) thì dữ liệu cũng được tự động cập nhật ngược lại Model. Trong cộng đồng Vue.js thường gọi mô hình này với một thuật ngữ khác là two-way data binding, tạm gọi là gán dữ liệu hai chiều. Chúng ta sẽ cùng tìm hiểu mô hình này trong ví dụ đầu tiên sử dụng Vue.js ở phần tiếp theo.

Ví dụ đầu tiên sử dụng framework Vue.js

Thành một thói quen, tất cả các ngôn ngữ lập trình khi bắt đầu học, chúng ta đều có ví dụ đầu tiên Hello world. Nó giúp chúng ta có cái nhìn cơ bản về một ngôn ngữ, nào chúng ta cùng bắt tay vào một ví dụ hiển thị một lời chào “Xin chào, tôi là framework Vue.js”.

<!DOCTYPE html>
<html>
<head>
    <title>Ví dụ đầu tiên Vue.js - allaravel.com</title>
</head>
<body>
    <div id="app">
        <h1>{{ message }}</h1>
        <input v-model="message">
    </div>
    <script src="https://vuejs.org/js/vue.min.js"></script>
    <script type="text/javascript">
        new Vue({
            el: '#app',
            data: {
                message: 'Xin chào, tôi là Vue.js'
            }
        })
    </script>
</body>
</html>

Kết quả như dưới đây

[jsfiddle url=”https://jsfiddle.net/allaravel/mkLv5v5z/2/” height=”200px” include=”result,html,js” font-color=”39464E” menu-background-color=”FFFFFF” code-background-color=”f3f5f6″ accent-color=”1C90F3″]

Ngay từ đầu, đối tượng message trong Model có giá trị “Xin chào, tôi là Vue.js” ngay lập tức giá trị của nó được hiển thị lên thẻ <h1> trên View thông qua cú pháp {{ message }}. Ô nhập liệu <input> cũng được gán với đối tượng message, do vậy ngay khi thay đổi giá trị trong thẻ <input> này, DOM Listener sẽ cập nhật giá trị đối tượng message ngược lại Model, và cũng ngay lập tức giá trị của đối tượng message cũng được cập nhật đến các View có tham chiếu đến message, mà ở đây là thẻ <h1>.

Ví dụ đầu tiên này đã phần nào giúp bạn hiểu được mô hình MVVM hay thuật ngữ gán dữ liệu hai chiều (two-way data binding). Tạm khép lại việc viết code trong Vue.js trong bài viết này.

Kiến thức cần thiết cho Vue.js

Sử dụng Vue.js nói riêng hay phát triển các ứng dụng web nói chung đòi hỏi khá nhiều các kiến thức cơ bản khác nhau, dưới đây là các kiến thức bạn nên có khi làm việc với Vue.js. Có thể có một số kiến thức không liên quan trực tiếp nhưng trong khuôn khổ loạt bài viết về Vue.js của Allaravel, bạn nên tìm hiểu:

Kiến thức Mô tả Mức độ quan trọng Độ khó
Ngôn ngữ HTML (Hyper Text Markup Language) là ngôn ngữ đánh dấu siêu văn bản Ngôn ngữ này là nền tảng khi thiết kế web 6 5
Ngôn ngữ CSS (Cascading Style Sheets) Ngôn ngữ này giúp cho website của bạn đẹp hơn, đặc biệt khi hiện nay website cần thiết kế cuốn hút. 6 6
Framework Bootstrap Framework CSS này giúp cho việc phát triển giao diện đơn giản và có thể phù hợp với mọi thiết bị, đặc biệt là hiện nay điện thoại thông minh được sử dụng rất nhiều, website cần tương thích hoàn toàn với thiết bị này nếu bạn không muốn mất đi các lượt viếng thăm. 5 6
Ngôn ngữ Javascript (hiện nay thông dụng hơn với tên gọi ECMAScript) Ngôn ngữ này giúp cho người dùng tương tác với website thuận tiện hơn 9 8
Ngôn ngữ PHP Giúp các website có nội dung liên tục thay đổi theo dữ liệu nằm trong Cơ sở dữ liệu. 7 8
Framework Laravel Với framework này, việc phát triển một ứng dụng bằng PHP trở lên thật đơn giản. Tham khảo Khóa học Laravel trong 7 ngày nếu bạn muốn làm chủ framework này. 7 7

Nói chung nếu bạn xác định trở thành một lập trình viên web thì tất cả những kiến thức ở trên là cần thiết, “không bổ dọc thì bổ ngang”.

So sánh Vue.js với jQuery

jQuery là một thư viện JavaScript có thể chạy trên nhiều trình duyệt được thiết kế để đơn giản hóa các kịch bản HTML phía máy khách, nó hoàn toàn miễn phí và là phần mềm mã nguồn mở. jQuery được giới thiệu lần đầu tiên vào năm 2006 bởi John Resig, hiện nay jQuery là thư viện JavaScript phổ biến nhất, nó có mặt ở hơn 60% trong 100 nghìn website có thứ hạng đầu tiên. Cú pháp jQuery được thiết kế để dễ dàng “duyệt” qua tài liệu, lựa chọn các thành phần DOM, tạo các hiệu ứng hoạt họa, quản lý sự kiện và phát triển các ứng dụng Ajax. Đa số các lập trình viên web đều biết đến jQuery, như vậy bạn có thể tưởng tượng ra độ phổ biến cũng như hữu ích của jQuery. Tuy nhiên, khi các ứng dụng web ngày càng phát triển với độ phức tạp cao ví dụ như ứng dụng mạng xã hội Facebook, ứng dụng Gmail… các ứng dụng dạng đơn trang SPA, việc sử dụng jQuery khiến mã nguồn không thể kiểm soát được. Vue.js là một sự lựa chọn tiếp theo mà sau loạt bài giới thiệu về Vue.js này, bạn sẽ phải thốt lên “Thật kỳ diệu, thật tuyệt vời”.

Chúng ta hãy thử viết ví dụ Hello world của Vue.js bằng jQuery xem thế nào và cùng phân tích nhé:

<!DOCTYPE html>
<html>
<head>
    <title>Ví dụ đầu tiên Vue.js chuyển đổi sang jQuery- allaravel.com</title>
</head>
<body>
    <h1>Xin chào, tôi là Vue.js</h1>
    <input type="text" value="Xin chào, tôi là Vue.js">
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("input").on("change blur keyup mouseup", function() {
                $("h1").text(($(this).val())); 
            });
        });
    </script>
</body>
</html>

Kết quả như sau:

[jsfiddle url=”https://jsfiddle.net/allaravel/ry79ong1/2/” height=”300px” include=”result,html,js” font-color=”39464E” menu-background-color=”FFFFFF” code-background-color=”f3f5f6″ accent-color=”1C90F3″]

Khi bạn trải nghiệm sẽ thấy giống với ví dụ đầu tiên sử dụng Vue.js, tuy nhiên cảm nhận có độ lag chút xíu hơn so với Vue.js tuy nhiên không phải vấn đề lớn. Vậy tại sao phải thay thế jQuery bởi Vue.js.

Chúng ta cùng xem xét vấn đề sau nhé. Giả sử bạn muốn cập nhật giá trị của ô nhập liệu <input> đến 100 thẻ <h1> khi đó bạn cần phải gán giá trị của 100 thẻ <h1> đó trong sự kiện thay đổi nội dung của <input> nếu sử dụng jQuery, với Vue.js bạn chẳng cần làm gì cả, 100 chứ 1000 thẻ <h1> cũng vậy, thay đổi dữ liệu ở Model tự động nó gán sang View.

Trên đây mới chỉ là vấn đề về số lượng, hãy xem tiếp logic sau, giả sử có hàng trăm thẻ <input> cùng thay đổi giá trị message và hiển thị lên hàng trăm thẻ <h1>, với jQuery khi viết code thật sự các sự kiện sẽ chồng lấn nhau và rất có khả năng dẫn đến treo cứng, giống như vài năm trước Facebook cũng đã từng không kiểm soát nổi trạng thái chồng chéo giữa các thành phần và cuối cùng phải sử dụng đến mô hình MVVM để giải quyết vấn đề này.

So sánh Vue.js với các framework cùng dạng

Hiện nay có rất nhiều các framework Javascript mạnh mẽ, kể đến có React (hậu thuẫn bởi Facebook), Angular (hậu thuẫn bởi Google), Ember, Riot, Polymer… tuy nhiên Vue.js đang là sự lựa chọn lý tưởng cho các ứng dụng web ở mức to vừa. Có mấy lý do như sau:

  • Hiệu năng Vue.js là thực sự đáng nể so với các đối thủ khác.
  • Vue.js có dung lượng tải cực bé do đã tách một số phần ra khỏi core như Vuex, vue-router… nó giúp cải thiện tốc độ tải của toàn trang.
  • Một lý do mà nhiều người tìm đến với Vue.js là tính đơn giản, dễ học, dễ áp dụng đặc biệt cho những người chưa có nhiều kiến thức nền.
  • Vue.js luôn học hỏi và tích hợp những gì tốt nhất từ các framework khác, nó cũng giống như framework Laravel nổi tiếng, luôn thay đổi và luôn tốt hơn.

Vue.js cũng có những yếu điểm, thứ nhất đội ngũ phát triển có hạn nên không thể có những tính năng để phát triển các hệ thống cực lớn, đấy là mình nghe đồn vậy chứ thực tế chưa kinh qua dự án nào mà không dùng được Vue.js. Thứ hai, Vue.js do Evan You, một người Mỹ gốc Trung Quốc phát triển đầu tiên, có một số bạn không thích nhưng mình thấy Trung Quốc mấy năm gần đây phát triển CNTT cực mạnh và chúng ta nên học tập họ.

Kết luận

Có rất nhiều thông tin được đề cập nhưng trong phần này bạn chỉ cần quan tâm đến mô hình MVVM hay gán dữ liệu hai chiều được sử dụng trong Vue.js. Bạn cũng yên tâm đây Vue.js rất dễ tìm hiểu, mình sẽ cố gắng sắp xếp kiến thức logic nhất, bên cạnh đó trong các phần tiếp theo, với mỗi bài viết sẽ có một vài bài tập nhỏ cho các bạn để vận dụng kiến thức được nhớ lâu hơn.

Bài viết gốc được đăng tải tại allaravel.com

Có thể bạn quan tâm:

Xem thêm Việc làm IT hấp dẫn trên Station D

Bài viết liên quan

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bài viết được sự cho phép của tác giả Chung Nguyễn Hôm nay, nhóm Laravel đã phát hành một phiên bản chính mới của “ laravel/installer ” bao gồm hỗ trợ khởi động nhanh các dự án Jetstream. Với phiên bản mới này khi bạn chạy laravel new project-name , bạn sẽ nhận được các tùy chọn Jetstream. Ví dụ: API Authentication trong Laravel-Vue SPA sử dụng Jwt-auth Cách sử dụng Laravel với Socket.IO laravel new foo --jet --dev Sau đó, nó sẽ hỏi bạn thích stack Jetstream nào hơn: Which Jetstream stack do you prefer? [0] Livewire [1] inertia > livewire Will your application use teams? (yes/no) [no]: ... Nếu bạn đã cài bộ Laravel Installer, để nâng cấp lên phiên bản mới bạn chạy lệnh: composer global update Một số trường hợp cập nhật bị thất bại, bạn hãy thử, gỡ đi và cài đặt lại nha composer global remove laravel/installer composer global require laravel/installer Bài viết gốc được đăng tải tại chungnguyen.xyz Có thể bạn quan tâm: Cài đặt Laravel Làm thế nào để chạy Sql Server Installation Center sau khi đã cài đặt xong Sql Server? Quản lý các Laravel route gọn hơn và dễ dàng hơn Xem thêm Tuyển dụng lập trình Laravel hấp dẫn trên Station D

By stationd
Principle thiết kế của các sản phẩm nổi tiếng

Principle thiết kế của các sản phẩm nổi tiếng

Tác giả: Lưu Bình An Phù hợp cho các bạn thiết kế nào ko muốn làm code dạo, design dạo nữa, bạn muốn cái gì đó cao hơn ở tầng khái niệm Nếu lập trình chúng ta có các nguyên tắc chung khi viết code như KISS , DRY , thì trong thiết kế cũng có những nguyên tắc chính khi làm việc. Những nguyên tắc này sẽ là kim chỉ nam, nếu có tranh cãi giữa các member trong team, thì cứ đè nguyên tắc này ra mà giải quyết (nghe hơi có mùi cứng nhắc, mình thì thích tùy cơ ứng biến hơn) Tìm các vị trí tuyển dụng designer lương cao cho bạn Nguyên tắc thiết kế của GOV.UK Đây là danh sách của trang GOV.UK Bắt đầu với thứ user cần Làm ít hơn Thiết kế với dữ liệu Làm mọi thứ thật dễ dàng Lặp. Rồi lặp lại lần nữa Dành cho tất cả mọi người Hiểu ngữ cảnh hiện tại Làm dịch vụ digital, không phải làm website Nhất quán, nhưng không hòa tan (phải có chất riêng với thằng khác) Cởi mở, mọi thứ tốt hơn Bao trừu tượng luôn các bạn, trang Gov.uk này cũng có câu tổng quát rất hay Thiết kế tốt là thiết kế có thể sử dụng. Phục vụ cho nhiều đối tượng sử dụng, dễ đọc nhất nhất có thể. Nếu phải từ bỏ đẹp tinh tế – thì cứ bỏ luôn . Chúng ta tạo sản phẩm cho nhu cầu sử dụng, không phải cho người hâm mộ . Chúng ta thiết kế để cả nước sử dụng, không phải những người đã từng sử dụng web. Những người cần dịch vụ của chúng ta nhất là những người đang cảm thấy khó sử dụng dịch...

By stationd
Hiểu về trình duyệt – How browsers work

Hiểu về trình duyệt – How browsers work

Bài viết được sự cho phép của vntesters.com Khi nhìn từ bên ngoài, trình duyệt web giống như một ứng dụng hiển thị những thông tin và tài nguyên từ server lên màn hình người sử dụng, nhưng để làm được công việc hiển thị đó đòi hỏi trình duyệt phải xử lý rất nhiều thông tin và nhiều tầng phía bên dưới. Việc chúng ta (Developers, Testers) tìm hiểu càng sâu tầng bên dưới để nắm được nguyên tắc hoạt động và xử lý của trình duyệt sẽ rất hữu ích trong công việc viết code, sử dụng các tài nguyên cũng như kiểm thử ứng dụng của mình. Cách để npm packages chạy trong browser Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser? Khi hiểu được cách thức hoạt động của trình duyệt chúng ta có thể trả lời được rất nhiều câu hỏi như: Tại sao cùng một trang web lại hiển thị khác nhau trên hai trình duyệt? Tại sao chức năng này đang chạy tốt trên trình duyệt Firefox nhưng qua trình duyệt khác lại bị lỗi? Làm sao để trang web hiển thị nội dung nhanh và tối ưu hơn một chút?… Hy vọng sau bài này sẽ giúp các bạn có một cái nhìn rõ hơn cũng như giúp ích được trong công việc hiện tại. 1. Cấu trúc của một trình duyệt Trước tiên chúng ta đi qua cấu trúc, thành phần chung và cơ bản nhất của một trình duyệt web hiện đại, nó sẽ gồm các thành phần (tầng) như sau: Thành phần nằm phía trên là những thành phần gần với tương tác của người dùng, càng phía dưới thì càng sâu và nặng về xử lý dữ liệu hơn tương tác. Nhiệm...

By stationd
Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Lĩnh vực EdTech (ứng dụng công nghệ vào các sản phẩm giáo dục) trên toàn cầu hiện nay đã tương đối phong phú với nhiều tên tuổi lớn phân phối đều trên các hạng mục như Broad Online Learning Platforms (nền tảng cung cấp khóa học online đại chúng – tiêu biểu như Coursera, Udemy, KhanAcademy,…) Learning Management Systems (hệ thống quản lý lớp học – tiêu biểu như Schoology, Edmodo, ClassDojo,…) Next-Gen Study Tools (công cụ hỗ trợ học tập – tiểu biểu như Kahoot!, Lumosity, Curriculet,…) Tech Learning (đào tạo công nghệ – tiêu biểu như Udacity, Codecademy, PluralSight,…), Enterprise Learning (đào tạo trong doanh nghiệp – tiêu biểu như Edcast, ExecOnline, Grovo,..),… Hiện nay thị trường EdTech tại Việt Nam đã đón nhận khoảng đầu tư khoảng 55 triệu đô cho lĩnh vực này nhiều đơn vị nước ngoài đang quan tâm mạnh đến thị trường này ngày càng nhiều hơn. Là một trong những xu hướng phát triển tốt, và có doanh nghiệp đã hoạt động khá lâu trong ngành nêu tại infographic như Topica, nhưng EdTech vẫn chỉ đang trong giai đoạn sơ khai tại Việt Nam. Tại Việt Nam, hệ sinh thái EdTech trong nước vẫn còn rất non trẻ và thiếu vắng nhiều tên tuổi trong các hạng mục như Enterprise Learning (mới chỉ có MANA), School Administration (hệ thống quản lý trường học) hay Search (tìm kiếm, so sánh trường và khóa học),… Với chỉ dưới 5% số dân công sở có sử dụng một trong các dịch vụ giáo dục online, EdTech cho thấy vẫn còn một thị trường rộng lớn đang chờ được khai phá. *** Vừa qua Station D đã công bố Báo cáo Vietnam IT Landscape 2019 đem đến cái nhìn toàn cảnh về các ứng dụng công...

By stationd