1

我正试图用来自实时JSON(带有pubnub)的仪表板的数据显示多个视图/控制器。如何将实时模型附加到angular.js中的控制器上?

在angular.js常规文档我看到:

function CounterCtrl($scope) { 
    $scope.data = {'counter':1}; 
}; 

但我要的是有数据源的列表,然后通知与数据的变化的看法和使它们。

所以,我可以有:

counter1:{'counter':1} => Rendered by view1 and view2 
counter2:{'counter':5} => Rendered by view3 

view4没有数据呢。一些分钟后它到达

counter3:{'counter':8} => Rendered by view4 

然后计数器1被更新

counter1:{'counter':2} 

创建由每个视图类型的控制器,一些2次可以是相同的控制器,但显示不同的数据:

view1 & view3 are UpDownCtrl 
view2 is LineGraphCtrl 

在仪表板中,我需要更新视图,并根据数据(或缺少它来显示空状态)更改行为。

PD:我愿意,如果是专为这样的任务要做到这一点在其他JS框架...

+0

创建角度“服务”以在控制器之间共享数据 – charlietfl 2013-03-08 12:38:36

+0

我阅读了文档,并且我明白这是为了向控制器提供常用功能。但是我不明白地图模型如何与几个控制器相关,就像这个问题所述。 – mamcx 2013-03-08 13:51:17

+0

试试这个视频http://egghead.io/video/angularjs-sharing-data-between-controllers/ – charlietfl 2013-03-08 19:30:22

回答

2

我使用PubNub为好,并已开始在一个非常基本的PubNub服务我AngularJS应用程序。

服务(工作正在进行中):

app.factory('pubnub', function($rootScope) { 
    var pubnub = { 
     lastMessage: '', 
     messages: [], 
     callback: function(message) { 
      pubnub.lastMessage = message; 
      pubnub.messages.unshift(message); 
      $rootScope.$broadcast('pubnubMessageReceived', message); 
     }, 
     getLastMessage: function() { 
      return pubnub.lastMessage; 
     }, 
     getMessages: function() { 
      return pubnub.messages; 
     } 
    } 

    PUBNUB.subscribe({ 
     channel : 'my_channel', 
     restore : false, 
     callback : pubnub.callback, 
    }); 

    return pubnub; 
}); 

其中的(多)控制器:

var ProjectController = function($scope, pubnub) { 

    $scope.$on('pubnubMessageReceived', function(event, message) { 
     console.log("pubnub message received in project controller",message); 
     if(message.target == "project") { 
      // The message is for me!! Do something with it 
      $scope.data = message.data; 
     } 
    }); 
} 

所以我听了PubNub消息的一个服务和广播他们超过$ rootScope,然后让任何控制器监听这些消息很简单。一旦您在控制器中收到消息,修改您的$范围,它会自动更新您的视图。

相关问题