将数据检索代码(websockets)移动到AngularJS控制器中

时间:2015-02-26 19:04:10

标签: angularjs angularjs-service

我编写了以下基本的AngularJS应用程序。到目前为止,所有这一切都是建立一个websocket结束,要求从中获取一些数据。

此实施有效。我接下来要做的就是将这些代码放在服务中。考虑到这一点,我想知道我将如何能够检索数据。只要websocket代码在控制器中,我就可以更新"条目" onmessage方法中的数组。

如何从服务中获取数据。我如何"附加"我的条目数组到服务并由服务更新?

    var mbclient = angular.module('mbclient', ['ngRoute']);

    mbclient.config(function ($routeProvider) {

    $routeProvider
        .when('/', {
            templateUrl: 'pages/home.html',
            controller: 'homeController',
            controllerAs: 'homeController'
        });
    });

    mbclient.controller('homeController', ['$log', '$scope', function ($log, $scope) {

    var self = this;
    this.dateFormat = 'dd.MM.yyyy';

    this.entries = [];

    var websocket = new WebSocket("ws://christians-MBP.fritz.box:8888");

    websocket.onopen = function () {
        $log.info("Socket has been opened");

        var message = JSON.stringify(self.entries);
        websocket.send(message);
    };

    websocket.onclose = function () {
        $log.info("Socket has been closed");
    };

    websocket.onmessage = function (event) {
        $log.debug("A message has been received");

        self.entries = JSON.parse(event.data);
        $scope.$digest();
    };
    }]);

1 个答案:

答案 0 :(得分:0)

您可以使用websocket方法和数据字段创建服务。您可以使用引用在控制器和服务之间共享数据。

mbclient.config(function ($routeProvider) {

    $routeProvider
        .when('/', {
            templateUrl: 'pages/home.html',
            controller: 'homeController',
            controllerAs: 'homeController'
        });
    });

mbclient.service('webSocketService', ['$log',function($log){

this.entries = []; 

//WebSockets here for example

 websocket.onmessage = function (event) {
        angular.extend(this.entries, JSON.parse(event.data));  
    };

}]);

    mbclient.controller('homeController', ['$log', '$scope', 'webSocketService', function ($log, $scope,webSocketService) {

    var self = this;
    this.dateFormat = 'dd.MM.yyyy';

    this.entries = webSocketService.entries;

   }

您无法将新数组分配给包含服务数据的字段,因为您丢失了引用。您必须在此字段上操作。