AngularJS Socket.io : Не удается прочитать свойство ’emit’ неопределенного типа

#javascript #node.js #angularjs #socket.io

#javascript #node.js #angularjs #socket.io

Вопрос:

в настоящее время я пытаюсь использовать angularjs с node и socketio. Но я получаю следующую ошибку.

Ошибка типа: не удается прочитать свойство ’emit’ неопределенного значения в k.$scope.Введенное имя пользователя (http://localhost:1337/js/controllers.js:34:19)

Похоже, что он не знает ‘socket’, когда вызывается функция enteredUsername(). Что-то не так с моей фабрикой?

app.js:

 'use strict';

angular.module('myApp', [
  'ngRoute',
  'myApp.filters',
  'myApp.services',
  'myApp.directives',
  'myApp.controllers'
])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/viewUsername', {templateUrl: 'partials/username.html', controller: 'usernameCtrl'});
  $routeProvider.when('/viewImpressum', {templateUrl: 'partials/impressum.html', controller: 'impressumCtrl'});
  $routeProvider.otherwise({redirectTo: '/viewUsername'});
}]);
  

controllers.js:

 'use strict';

/* Controllers */

angular.module('myApp.controllers', [])
    .factory('socket', function($rootScope) {
        var socket = io.connect('http://localhost:1337');
        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);
                        }
                    });
                });
            }
        };
    })
    .controller('usernameCtrl', ['$scope', function($scope, socket) {
        $scope.username = 'guest';

        $scope.EnteredUsername = function() {
            var username = $scope.username;
            socket.emit('enteredUsername', username);
        }
    }]);
  

Ответ №1:

Вы пропустили добавление его в виде строки:

 .controller('usernameCtrl', ['$scope', 'socket', function($scope, socket) {