socket.io+angular.js+express.js做個聊天應用(四)
接著上一篇
使用angularjs構建聊天室的客戶端
<!doctype html>
<html ng-app="justChatting">
<head>
<meta charset="UTF-8">
<title>justChatting</title>
<link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="/stylesheets/room.css">
<script type="text/javascript" src="/socket.io/socket.js"></script>
<script type="text/javascript" src="/bower_components/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/bower_components/angular/angular.js"></script>
</head>
<body>
<script type="text/javascript">
var socket=io.connect('/');
socket.on('connected',function(){
alert('connected to justChatting!');
});
</script>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="#">justChatting</a>
</div>
</div>
</div>
<div class="container" style="margin-top:100px;">
<div class="col-md-12">
<div class="panel panel-default room" ng-controller="RoomCtrl">
<div class="panel-heading room-header">justChatting</div>
<div class="panel-body room-content">
<div class="list-group messages" auto-scroll-to-bottom>
<div class="list-group-item message" ng-repeat="message in messages">
某某: {{message}}
</div>
</div>
<form class="message-creator" ng-controller="MessageCreatorCtrl">
<div class="form-group">
<textarea required class="form-control message-input" ng-model="newMessage" ctrl-enter-break-line="createMessage()" placeholder="Ctrl+Enter to quick send"></textarea>
</div>
</form>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="javascripts/node.js"></script>
</body>
</html>
修改node.js
angular.module('justChatting', [])
angular.module('justChatting').factory('socket', function($rootScope) {
var socket = io.connect('/')
return {
on: function(eventName, callback) {
socket.on(eventName, function() {
var args = arguments
$rootScope.$apply(function() {
callback.apply(socket, args)
})
})
},
emit: function(eventName, data, callback) {
socket.emit(eventName, data, function() {
var args = arguments
$rootScope.$apply(function() {
if (callback) {
callback.apply(socket, args)
}
})
})
}
}
})
angular.module('justChatting').directive('ctrlEnterBreakLine', function() {
return function(scope, element, attrs) {
var ctrlDown = false
element.bind("keydown", function(evt) {
if (evt.which === 17) {
ctrlDown = true
setTimeout(function() {
ctrlDown = false
}, 1000)
}
if (evt.which === 13) {
if (ctrlDown) {
element.val(element.val() + '\n')
} else {
scope.$apply(function() {
scope.$eval(attrs.ctrlEnterBreakLine);
});
evt.preventDefault()
}
}
});
};
});
angular.module('justChatting').controller('MessageCreatorCtrl', function($scope, socket) {
$scope.createMessage = function () {
socket.emit('messages.create', $scope.newMessage)
$scope.newMessage = ''
}
})
angular.module('justChatting').directive('autoScrollToBottom', function() {
return {
link: function(scope, element, attrs) {
scope.$watch(
function() {
return element.children().length;
},
function() {
element.animate({
scrollTop: element.prop('scrollHeight')
}, 1000);
}
);
}
};
});
angular.module('justChatting').controller('RoomCtrl', function($scope, socket) {
$scope.messages = []
socket.on('messages.read', function (messages) {
$scope.messages = messages
})
socket.on('messages.add', function (message) {
$scope.messages.push(message)
})
socket.emit('messages.read')
})
一個簡陋的聊天室完成。
相關文章
- 使用 Workman 做一個聊天室
- WEB例項:開發一個聊天室應用Web
- 基於 WebRTC 與 Webcam 開發一個聊天應用Web
- 如何使用python做一個聊天小程式?Python
- 使用 Socket.io 和 React 開發一個聊天應用React
- Angular做一個筆記文章管理應用Angular筆記
- 做一個可除錯的Android應用除錯Android
- 用Python基於Google Bard做一個互動式的聊天機器人PythonGo機器人
- 做一個可以聊天的 Visual Studio Code 外掛
- 用 Git 作為聊天應用的後端Git後端
- 打造一個window桌面應用:線上聊天對話機器人機器人
- 開源專案:採用 Laravel 編寫的一個聊天應用 Laravel-ChatLaravel
- React全家桶+Egg 做一個協作聊天室~React
- java小課設:使用MySQL做一個聊天室JavaMySql
- 一款極簡的聊天應用
- 基於 Flutter+Dart 仿微信 App 聊天應用|flutter 聊天介面FlutterDartAPP
- 在語音聊天原始碼中實現一個滿天星效果,應該如何做?原始碼
- 《花100塊做個摸魚小網站! 》第四篇—前端應用搭建和完成第一個熱搜元件網站前端元件
- sbc(四)應用限流
- [應用案例]一個基金管理工具,做來自己用的
- 聊天室應用開發實踐(一)
- 基於Flutter的仿微信聊天應用Flutter
- [譯] 響應式 Web 應用(四)Web
- Laravel 整合 workerman 做聊天室Laravel
- 【譯】十二因子應用(四)
- 品易雲HTTP短效IP的四個應用場景HTTP
- workerman結合laravel開發線上聊天應用Laravel
- 開源專案分享:ChatGPT 控制檯聊天應用ChatGPT
- Netty高階應用及聊天室實戰Netty
- HarmonyOS 5.0應用開發——仿微信聊天介面
- 如何從零入門React?實戰做個FM應用吧React
- 這8個工具,用來做python應用程式開發太合適了!Python
- 用Unity做半個2D戰棋小遊戲(四):加入玩家控制Unity遊戲
- Node.js+express+MongoDB+socket.io做的一個即時聊天案例Node.jsExpressMongoDB
- Node.js+express+MongoDB+socket.io 做的一個即時聊天案例Node.jsExpressMongoDB
- 瘋狂的 Vue3 之 四個函式寫應用Vue函式
- Laravel 整合 GatewayWorker 做的聊天室LaravelGateway
- zookeeper使用(四)--應用場景
- Redis之Lua的應用(四)Redis