安裝好環境,請參考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/
