Chuyển đến nội dung chính

[Tutorial] Tạo ứng dụng chát chỉ với Firebase và AngularJS


Một số kiến thức cơ bản bạn cần biết để thực hiện bài tutorial này. Bạn có thể code với Notepad hoặc Notepad++, không cần IDE gì cả:
  1. HTML
  2. Javascript
  3. AngularJS (Chỉ cần ở mức độ Beginner, biết một chút thôi, không cần nhiều). Hãy đọc bài viết này, bạn đã có đủ kiến thức cơ bản AngularJS để làm theo tutorial: http://sangplus.com/angular-js-101-gioi-thieu-ve-angularjs.html

Đầu tiên, mình sẽ mô tả về ứng dụng chúng ta sẽ làm:

Khi người dùng vào ứng dụng, người dùng được yêu cầu nhập tên.
Sau khi nhập tên, người dùng nhập nội dung vào textbox, bấm enter. Mọi người khác trong phòng chat sẽ thấy tin nhắn mới.
Một số bạn sẽ hỏi: Không có database để lưu dữ liệu, không có server để xử lý thì làm sao chat, làm sao realtime như chat được. Để đơn giản, tất cả những việc như: Lưu trữ dữ liệu, đồng bộ dữ liệu trên client sẽ được xử lý bởi Firebase, một dịch vụ cloud hỗ trợ xây dựng ứng dụng realtime.

Các bạn hãy vào trang web của Firebase https://www.firebase.com/signup/, và đăng kí một tài khoản mới:


Sau khi có URL để kết nối tới service của Firebase, chúng ta có thể bắt đầu code. Mở Notepad, Notepad++ hay IDE của bạn, sau đó tạo 1 file html trắng nhé.

Ta thêm 3 file script, trở tới 3 thư viện cần dùng, đó là AngularJS, Firebase, và AngularFire (Thư viện hỗ trợ Firebase cho AngularJS).

<!DOCTYPE html>
<html>
<head>
<title>Firebase App</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<script src="https://cdn.firebase.com/js/client/2.0.4/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.9.0/angularfire.min.js"></script>
</head><!-- AngularJS -->
<!-- Firebase -->
<!-- AngularFire -->

<body>
</body>
</html>

Trước khi viết html, chúng ta hãy viết code javascript trước, với một số hàm để lấy và gửi dữ liệu như sau:

var app = angular.module('app', ['firebase']); //Tạo 1 module của angular, inject module firebase vào
app.controller('chatCtrl', ['$scope', '$firebase',
function($scope, $firebase) {
var name = prompt("Enter your name: ", '');
$scope.name = name; //Lấy tên của người dùng
$scope.chatMessage = ""; //Tẩy trắng khung text
//Kết nối tới service của firebase, url ở đây là url app của bạn ở bước trên nhé
var ref = new Firebase(
"https://amber-torch-****.firebaseio.com/");
var sync = $firebase(ref);
$scope.chatMessages = sync.$asArray(); //Lấy toàn bộ dữ liệu trong database trên Firebase, biến nó thành 1 array các object trong javascript
$scope.sendChat = function() {
var chatMessage = {
name: name,
message: $scope.chatMes
};
$scope.chatMessages.$add(chatMessage); //Thêm 1 tin nhắn vào array
$scope.chatMes = "";
}
}
]);

Code có vẻ cũng khá đơn giản nhỉ? Cơ chế hoạt động của chương trình như sau


  1. Toàn bộ dữ liệu được lưu trữ ở database của firebase. Dữ liệu sẽ được đồng bộ 2 chiều xuống array chatMessages ở clients, thông qua thư viện $firebase.
  2. Dữ liệu trong array chatMessages sẽ được chuyển thành html, đồng bộ 2 chiều nhờ AngularJS.
  3. Ở client, khi chúng ta thêm 1 tin nhắn vào array chatMessages, dữ liệu sẽ được đồng bộ ngược lên firebase, sau đó đồng bộ từ firebase sang các client khác.

Do việc đồng bộ từ client => Firebase => client khác đã được thư viện lo, chúng ta chỉ viết phần đồng bộ từ client lên html. Bắt đầu viết html nào

<body>
<h1>Firebase chatbox</h1>

<div>
<div id="chatBox" style="padding: 10px; border: black 1px solid">
<h1>Chat box</h1>

<!-- Đồng bộ từ array chatMessage sang HTML.
Hàm limit To để lấy 15 messages cuối cùng -->
<div>
<span style="font-weight: bold">{{chatMessage.name}}</span> :
<span>{{chatMessage.message}}</span>
</div>
</div>

<form> Name: {{name}}</pre>
<pre> <!-- Khi người dùng bấm enter, ta gọi hàm sendChat trong controller,
thực hiện đồng bộ, hiển thị tin nhắn trên máy những người dùng khác -->
Chat: <input type="text" ng-model="chatMes" />
<button type="submit" ng-click="sendChat()">Send</button>
</form>
</div>
</body>

Nếu thực hiện đúng, chương trình sẽ có giao diện thế này :


Sau khi chat thử, bạn vào url trên database sẽ thấy data như thế này:


Tổng hợp toàn bộ code của chương trình, đúng 52 dòng nhé

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Firebase App</title>
</head>
<!-- AngularJS -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
<!-- Firebase -->
<script src="https://cdn.firebase.com/js/client/2.0.4/firebase.js"></script>
<!-- AngularFire -->
<script src="https://cdn.firebase.com/libs/angularfire/0.9.0/angularfire.min.js"></script>

<body ng-app="app">
<h1>Firebase chatbox</h1>
<div ng-controller="chatCtrl">
<div id="chatBox" style="padding: 10px; border: black 1px solid">
<h1>Chat box</h1>
<div ng-repeat="chatMessage in chatMessages | limitTo:-15"> <span style="font-weight: bold">{{chatMessage.name}}</span> : <span>{{chatMessage.message}}</span>
</div>
</div>
<form> Name: {{name}} Chat:
<input type="text" ng-model="chatMessage" />
<button type="submit" ng-click="sendChat()">Send</button>
</form>
</div>
</body>
<script>
var app = angular.module('app', ['firebase']);
app.controller('chatCtrl', ['$scope', '$firebase', function($scope, $firebase) {
var name = prompt("Enter your name: ", '');
$scope.name = name;
$scope.chatMessage = "";
var ref = new Firebase("https://amber-torch-2590.firebaseio.com/");
var sync = $firebase(ref);
$scope.chatMessages = sync.$asArray();
$scope.sendChat = function() {
var chatMessage = {
name: name,
message: $scope.chatMes
};
$scope.chatMessages.$add(chatMessage);
$scope.chatMes = "";
}
$scope.clear = function() {
for(var i = 0; i < $scope.chatMessages.length; i++) {
$scope.chatMessages.$remove($scope.chatMessages[i]);
}
}
}]);
</script>

</html>

Nhận xét

Bài đăng phổ biến từ blog này

[Blogger] Gỡ bỏ bản quyền template Blogspot không bị chuyển hướng

Xin chào các blogger, hẳn khi làm blog bạn chẳng còn xa lạ gì những trang cung cấp template nổi tiếng như soratemplates, gooyaabitemplates,... đúng không. Mỗi khi bạn tải template về thường có 2 tùy chọn đó là bản free và bản premium. Sự khác biệt giữa chúng là quá rõ ràng kể đến như support hoặc mã hóa code,...


Dân nghèo như chúng ta thường chỉ chơi bản free thôi, và đương nhiên sẽ có nhiều template dính quả bản quyền thần chưởng, ở đó thì họ thường gắn tên vào cuối footer và khi ta xóa dòng đó đi web site sẽ tự động chuyển hướng tới trang chủ của họ. Nói chung ta không nên xóa bản quyền template đi vì đó thể hiện sự tôn trọng tới người đã tạo ra template cho ta sử dụng.

Còn trong khuôn khổ bài viết này hung1001 sẽ cùng bạn tìm hiểu cách gỡ và thêm bản quyền của bạn vào nếu như bạn thích.


Ở đây tôi làm mẫu với template Treasury của Sora bản free. Đây là dòng tác giả đã chèn bản quyền và có đoạn js điều hướng nếu dòng bị xóa


Nhiệm vụ của bạn đó là đi dò toàn bộ các đoạn mã js đã bị mã hó…

[Blogger] Tạo hiệu ứng tuyết rơi chào đón Noel cho blogspot

Noel sắp đến để tăng thêm hiệu ứng cho blog của bạn hãy thêm vào 1 chút hiệu ứng tuyết rơi để cho không khí thêm sôi động


Cách làm cực kì đơn giản:

Đăng nhập vào blogChọn mẫu và vào phần chỉnh sửa htmlBạn để đoạn code sau vào giữa cặp thẻ <body> ... </body>
<script src='https://cdn.rawgit.com/hung1001/blogspot/master/js/tuyetroi.js'/>

Code nhúng trực tiếp vào web không thông qua host

<script type="text/javascript">
//<![CDATA[
var snowmax=100
var snowcolor=new Array("#f2f8fa","#eff5f7","#dcedf1","#ffffff")
var snowtype=new Array("Times","Arial","Times","Verdana")
var snowletter="*"
var sinkspeed=1
var snowmaxsize=30
var snowminsize=20
// Set 1 for all-over-snowing, set 2 for left-side-snowing
// Set 3 for center-snowing, set 4 for right-side-snowing
var snowingzone=1
// Do not edit below this line
var snow=new Array()
var marginbottom
var marginright
var timer
var i_snow=0
v…

Share Template Mudah Grid Responsive.

Chào mọi người, dạo gần đây mình thấy có một bản mẫu blogspot đi kèm với một giao diện khá thân thiện nên mình cũng đem về rồi nhờ người anh em thân thiết xóa cái bản quyền template đi rồi share cho anh em dùng.  ƯU ĐIỂMLoad nhanhSEO tốtChuẩn responsiveRecent labelButton ShareFollow by emailBreadcrumbs...NHƯỢC ĐIỂMThì mình chưa tìm ra. Cách nhận template- Comment link share trên mạng xã hội ( tùy tâm ) - Comment mail phía dưới. Lưu ý: Bản này hoàn toàn đã xóa bản quyền rồi nhé.
Xem Demo