AngularJS如何获得实际的工厂数据控制器? [英] AngularJS how to get actual factory's data in controller?

查看:100
本文介绍了AngularJS如何获得实际的工厂数据控制器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有工厂,当我得到套接字消息。
我怎么能得到恢复工厂的实际数据在我的控制?
请帮助。

\r
\r

app.factory('插座',['$ rootScope',函数($ rootScope){\r
\r
    connection.open();\r
\r
    VAR连接=新autobahn.Connection({\r
        网址:'WSS://site.com:6555 /',\r
        境界:'境界'\r
    });\r
\r
    VAR集合{=\r
       TOPIC1:[],\r
       TOPIC2:[]\r
    };\r
\r
  功能的OnEvent(参数){\r
      的console.log(事件:ARGS [0]);\r
      collection.topic1.push(参数[0]);\r
   }\r
\r
  connection.onopen =功能(会话){\r
   session.subscribe(用户ID,一个OnEvent);\r
  }\r
\r
    返回{\r
       集合:集合\r
    }\r
\r
}]);

\r

\r
\r


解决方案

该工厂不能将数据推到一个控制器,但控制器可以从工厂拉。这样做,工厂注入到控制器:

  app.controller('yourController',['$范围','插座',函数($范围,插座){
    ...
    $ scope.yourControllerCollection = socket.collection;
    ...
});

如果您希望控制器自动更新时的套接字工厂接收一个事件并更新集合,你可以随时注入$ rootScope进厂和$发出你的控制器可以听的事件。是这样的:

  app.factory('插座',['$ rootScope',函数($ rootScope){   ...
   功能的OnEvent(参数){
      的console.log(事件:ARGS [0]);
      collection.topic1.push(参数[0]);
      。$ rootScope $放出('SocketCollectionUpdated',集合); //请注意,您可以命名任何你想要的事件。
   }
   ...}]);app.controller('yourController',['$ rootScope','$范围','插座',函数($ rootScope,$范围,插座){
    ...
    $ scope.yourControllerCollection = socket.collection;
    $ rootScope。在$('SocketCollectionUpdated',函数(事件数据){
        $ scope.yourControllerCollection =数据;
    });
    ...
});

I have the factory, when i get socket messages. How i can get returned factory's actual data in my controller ? Help please.

app.factory('socket',['$rootScope', function($rootScope) {

    connection.open();

    var connection = new autobahn.Connection({
        url: 'wss://site.com:6555/',
        realm: 'realm'
    });

    var collection = {
       'topic1': [],
       'topic2': []
    };

  function onevent(args) {
      console.log("Event:", args[0]);
      collection.topic1.push(args[0]);
   }

  connection.onopen = function(session) {
   session.subscribe(userid, onevent);
  }

    return {
       collection: collection
    }

}]);

解决方案

The factory cannot push data to a controller, but the controller can pull from the factory. To do so, inject the factory into the controller:

app.controller('yourController', ['$scope', 'socket', function($scope, socket) {
    ...
    $scope.yourControllerCollection = socket.collection;
    ...
});

If you want the controller to auto-update when the socket factory receives an event and updates the collection, you can always inject the $rootScope into the factory and $emit an event that your controller can listen to. Something like:

app.factory('socket',['$rootScope', function($rootScope) {

   ...
   function onevent(args) {
      console.log("Event:", args[0]);
      collection.topic1.push(args[0]);
      $rootScope.$emit('SocketCollectionUpdated', collection); // Note that you can name your event whatever you want.
   }
   ...

}]);

app.controller('yourController', ['$rootScope', '$scope', 'socket', function($rootScope, $scope, socket) {
    ...
    $scope.yourControllerCollection = socket.collection;
    $rootScope.$on('SocketCollectionUpdated', function (event, data) {
        $scope.yourControllerCollection = data;
    });
    ...
});

这篇关于AngularJS如何获得实际的工厂数据控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆