安裝好環境,請參考ionic環境搭建之windows篇 和 ionic環境搭建之OS X篇 。
服務器端的搭建參考socket io官網,里面有非常詳細的描述,按照步驟下來,最終可以在localhost進行模擬聊天。
下面是手機端的說明。
- 引入socket.io.js:
<script src="js/socket.io.js"></script>
- 定義Chats tab:
<!-- Chats Tab --> <ion-tab title="Chats" icon-off="ion-ios-chatboxes-outline" icon-on="ion-ios-chatboxes" href="#/tab/chats"> <ion-nav-view name="tab-chats"></ion-nav-view> </ion-tab>
- 定義tab-chat.html:
<ion-view view-title="Chats"> <ion-content overflow-scroll="true" style="overflow: hidden"> <ion-scroll zooming="true" direction="y" style=" height:500px;" > <ion-list> <uib-alert ng-repeat="msgInfo in messages" type="{{msgInfo.type}}" close="closeAlert($index)">{{msgInfo.msgType}}: {{msgInfo.msg}}</uib-alert> </ion-list> </ion-scroll> <div class="bar bar-footer"> <label class="item item-input" style=" width:85%"> <input type="text" placeholder="please add your message here" ng-model="msg"></input> </label> <button class="button button-positive" ng-click="send(msg)">Send</button> </div> </ion-content> </ion-view>
- 在app.js中定義chats的state:
.state('tab.chats', { url: '/chats', views: { 'tab-chats': { templateUrl: 'templates/tab-chats.html', controller: 'ChatsCtrl' } } })
- 定義ChatsCtrl:
.controller('ChatsCtrl', function ($scope,mediaPlayer, chats) { $scope.messages = []; chats.on('chat message', function (msg) { var msgInfo = { msg: msg, type: 'warning',msgType:"Receiver" } $scope.messages.push(msgInfo); console.log('receive msg from others: ' + msg); }); $scope.send = function (msg) { var msgInfo = { msg: msg, type: 'success', msgType: "Sender" } $scope.messages.push(msgInfo); console.log('start to send msg: ' + msg); chats.emit('chat message', msg); }; $scope.closeAlert = function (index) { $scope.messages.splice(index, 1); }; })
- 實現factory:
var baseUrl = 'http://localhost:3000/'; .factory('chats', function socket($rootScope) { var socket = io.connect(baseUrl); 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); } }); }) } }; })
參考資料:
https://github.com/jbavari/ionic-socket.io-redis-chat http://jbavari.github.io/blog/2014/06/17/building-a-chat-client-with-ionic/ http://socket.io/get-started/chat/