嘿,我遇到了一個奇怪的問題。我的socket.emit
正在爲我的一個控制器工作,但它不適用於另一個控制器。socket.emit只適用於一個控制器AngularJS
server.js(服務器端)
io.sockets.on('connection', function(socket){
console.log('User ' + socket.id + ' connected');
socket.emit('test');
});
QueueController.js(客戶端)(工作)
app.controller('QueueController', ['$scope', '$location', '$rootScope', 'socket',
function($scope, $location, $rootScope, socket){
socket.on('chat start', function(data){
$rootScope.$apply(function(){
$location.path('/chat');
});
});
socket.on('test', function(){
console.log('hello world'); //this displays fine in the console
});
});
ChatController(客戶端) (不工作)
app.controller('ChatController', ['$scope', '$rootScope', 'socket',
function($scope, $rootScope, socket){
socket.on('test', function(){
console.log('hello world'); //this does not display at all
});
});
我讀過一個需要包裝內
socket.on('connect', function(){ ... }
的socket.emit
,但沒有奏效。
這是我的路線:
app.js
var app = angular.module('ChatApp', ['ngRoute', 'ngAnimate', 'luegg.directives', 'btford.socket-io']);
app.config(function($routeProvider, $locationProvider){
$routeProvider
.when('/', {
controller:'HomeController',
templateUrl:'views/home.html'
})
.when('/queue', {
controller:'QueueController',
templateUrl:'views/queue.html'
})
.when('/chat', {
controller:'ChatController',
templateUrl:'views/chat.html'
})
.otherwise({
redirectTo: '/'
});
});
任何想法有什麼不對?
您知道根據您當前的路線只有一個控制器處於活動狀態嗎? – Quad
我不知道。我必須做什麼才能切換到新的主動控制器?可能嗎? – Student22
當您訪問http:// yourapp/queue時,將獲得您在路由配置中定義的模板和控制器。如果你去/聊天(你可以輸入網址欄或在頁面的某個地方放一個鏈接),你可以通過它的模板獲得chatcontroller。如果你想要一個路由器中的附加控制器,你需要將一個帶有ng-controller的元素放在你的模板中。 – Quad