SORU
16 NİSAN 2012, PAZARTESİ


Görünüm AngularJS güncel değil

Model etkinlik geri modeli güncellerken görünümü üzerinde etkisi yoktur güncellenmesi, herhangi bir fikir bunu düzeltmek için?

Bu benim hizmet

angular.service('Channel', function() {        
    var channel = null; 

    return {        
        init: function(channelId, clientId) {
            var that = this;        

            channel = new goog.appengine.Channel(channelId);
            var socket = channel.open();

            socket.onmessage = function(msg) {
                var args = eval(msg.data);              
                that.publish(args[0], args[1]);
            };
        }       
    };
});

5* *fonksiyon denetleyicisi dinamik olarak eklendi.

Denetleyici:

App.Controllers.ParticipantsController = function($xhr, $channel) {
    var self = this;

    self.participants = [];     

    // here publish function is added to service
    mediator.installTo($channel); 

    // subscribe was also added with publish        
    $channel.subscribe(' p', function(name) { 
        self.add(name);     
    });                 

    self.add = function(name) {     
        self.participants.push({ name: name });     
    }
};

App.Controllers.ParticipantsController.$inject = ['$xhr', 'Channel'];

Görünüm:

<div ng:controller="App.Controllers.ParticipantsController">      
    <ul>
        <li ng:repeat="participant in participants"><label ng:bind="participant.name"></label></li>
    </ul>

    <button ng:click="add('test')">add</button>
</div>

Sorun düğme güncellemeleri görünümü düzgün tıklayarak o kadar, ama hiçbir şey olmuyor Kanal mesajı aldığımda, add() bile işlev olarak adlandırılır

CEVAP
16 NİSAN 2012, PAZARTESİ


$scope.$apply() kaçırıyorsun.

Seni Açısal dünya dışından hiçbir şeye dokunma ne zaman aramalısınız $uygulamak, Açısal bildirmek için. Bu olabilir:

  • geri arama ($http servisi tarafından işlenen) xhr
  • geri arama (erteleme $service ele) setTimeout
  • Olay geri arama (APS tarafından ele) DOM

Senin durumunda böyle bir şey yapın:

// inject $rootScope and do $apply on it
angular.service('Channel', function($rootScope) {
  // ...
  return {
    init: function(channelId, clientId) {
      // ...
      socket.onmessage = function(msg) {
        $rootScope.$apply(function() {
          that.publish(args[0], args[1]);
        });
      };
    }
  };
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • karneson

    karneson

    23 Temmuz 2006
  • RaquelGamesBR

    RaquelGamesB

    20 HAZİRAN 2009
  • William Sledd

    William Sled

    24 EYLÜL 2006