2013-06-07 5 views
2

Я пытаюсь заставить Angular JS работать с веб-сокетами, а после получения базовой установки из семян растрового веб-сайта на Github, я все еще сталкиваюсь с небольшой проблемой с привязкой двухсторонней привязки. Я использую файл как конфигурационный файл, чтобы установить начальные значения приложения, который содержит следующее:Угловые JS и веб-гнезда

socket.emit('button:state', { 
    state: 'default' 
    }); 

Тогда я контроллер, который имеет дело с состоянием кнопки на начальном этапе, а затем пытается переписать исходное состояние через веб-сокет:

function MyCtrl1($scope, socket) { 

    // UI INITIAL STATE 
    socket.on('button:state', function (data) { 
     $scope.buttonState = data.state; 
    }); 

    // UI CLICKED STATE 
    $scope.buttonClicked = function(data) { 
     //$scope.buttonState = 'clicked'; 
     socket.emit('button:state', { 
      state: 'clicked' 
     }); 
     console.log('button clicked'); 
    }; 
} 
MyCtrl1.$inject = ['$scope', 'socket']; 

вид просто установить в Джейд:

div(class='button', ng-class='buttonState', ng-click='buttonClicked()') 

Может кто-нибудь пролить некоторый свет, пожалуйста?

+0

Здесь нет ничего очевидного. Я часто нахожу, что устанавливаю значение по умолчанию перед любым другим чем-то вроде '$ scope.buttonState = ''' или полезно инициализировать, а также отслеживать переменные, которые я использую для состояния. Можете ли вы опубликовать результаты работы Jade? –

ответ

2

Вы не в RunLoop у углового. Попробуйте добавить $scope.$apply(); после смены buttonState, когда вы получите от сокета.

Смежные вопросы