2015-03-30 2 views
0

Недавно я начал интегрировать AngularJS в проект. Прежде, чем я написал много прототипов и отдельных функций в JavaScript, например (функция Node.js + socket.io).Как получить доступ к AngularJS в JQuery?

Сегодня возникают проблемы в общении AngularJS с ясным JavaScript:

JS:

socket.on('message', function (data) { 
    showSystemMessage(); 
} 

function showSystemMessage(message) { 
    // Increment here AngularJS $scope.messagesCnt++ ?; 
} 

AngularJS:

.controller('MessagesController', ['$scope', function($scope) { 
    $scope.messagesCnt = 0; 
}]) 

HTML:

<div>{{messagesCnt}}</div> 

Пожалуйста, внимание к методу: showSystemMessage()

+0

вы получаете какие-либо ошибки? является 'showSystemMessage()', определенным в угловом файле? иначе у него не будет доступа к '$ scope' –

ответ

0

Написать свой сокет код слушателя внутри контроллера

function appcontroller($scope){ 

    socket.on('message', function (data) { 
    showSystemMessage(); 
    } 

    function showSystemMessage(message) { 
     $scope.$apply(function(){ 
     // Increment here AngularJS $scope.messagesCnt++ ?; 
    }); 
    } 
} 
0

Если вы действуете showSystemMessage находится вне области видимости контроллера, нет никакого способа, вы можете обновить область переменной messagesCnt. (Есть, но не прямо.)

Вместо этого эта функция должна находиться в угловой службе вместо этого, а затем в любое событие, которое вы хотите, вы можете транслировать сообщение из своей службы на ваш контроллер, чтобы обновить его значение счета.

2

В идеале, вы должны следить за тем, что сказал @Yaseer, но я вижу, что вы используете встроенную реализацию Socket IO. [Нет угловой обертки вокруг].

Таким образом, у вас есть два решения:

  1. Используйте Angular Socket IO

  2. доступа Угловое контроллер от нативного JavaScript:

Для этого вы должны иметь элемент с идентификатором Я БЫ. то вы можете использовать id для доступа к связанной области.

angular.element("#your-identifier-id-here").scope().messagesCnt++; 
Смежные вопросы