Передача данных из сервиса контроллеру AngularJS 1.3.15 - PullRequest
0 голосов
/ 07 мая 2020

У меня большая проблема с отправкой данных в мой WorkspaceController. js из-за запуска службыWebGazer. У меня есть веб-обозреватель. js, который оценивает точки прогнозирования и передает их в переменные xprediction и yprediction в StartingWebgazer. js (это моя услуга)

app.service('startingWebGazer', function () {
this.startgazer = function () {
    window.onload = function () {
        webgazer.setRegression('ridge') /* currently must set regression and tracker */
            .setTracker('clmtrackr')
            .setGazeListener(function (data, elapsedTime) {
                if (data == null) {
                    return
                }
                var xprediction = data.x; //these x coordinates are relative to the viewport
                console.log(xprediction);
                return xprediction;
                // var yprediction = data.y; //these y coordinates are relative to the viewport
            }).begin()
            .showPredictionPoints(true); /* shows a square every 100 milliseconds where current prediction is */
        var setup = function () {

            //Set up the main canvas. The main canvas is used to calibrate the webgazer.
            var canvas = document.getElementById("plotting_canvas");
            canvas.width = window.innerWidth;
            canvas.height = window.innerHeight;
            canvas.style.position = 'fixed';
        };

        function checkIfReady() {
            if (webgazer.isReady()) {
                setup();
            } else {
                setTimeout(checkIfReady, 100);
            }
        }

        setTimeout(checkIfReady, 100);

    };


    window.onbeforeunload = function () {
        console.log('user want to left the page');
        //webgazer.end(); //Uncomment if you want to save the data even if you reload the page.
        window.localStorage.clear(); //Comment out if you want to save data across different sessions
    }
}});

поэтому я хочу передать xprediction в WorkspaceController. js для выполнения некоторых оценок в будущем в контроллере

app.controller('WorkspaceController', ['$scope', 'startingWebGazer', function ($scope, startingWebGazer) {
// create configuration object
$scope.startingWebGazer = startingWebGazer;
console.log($scope.startingWebGazer);
console.log('data in workspace', $scope.startingWebGazer.startgazer());}]);

, но у меня большая проблема, потому что startgazer не определен, хотя xpreriction оценивается хорошо (это показывает console.log) enter image description here

в чем проблема? почему я вижу xprediction в console.log, но не могу передать его контроллеру? и что мне делать?

1 Ответ

1 голос
/ 13 мая 2020

Я не уверен, правильно ли я понимаю вашу проблему, но startgazer не возвращает значение в том виде, в котором оно определено. он присваивает window.onload и window.onbeforeunload, а затем завершается без оператора return, что означает, что он возвращает undefined. вы можете присвоить xprediction переменной в области действия службы и вернуть эту переменную. я мог представить, что что-то подобное может служить вашей цели:

app.service('startingWebGazer', function () {
    let x = 0;

    this.startgazer = function () {
        window.onload = function () {
            ...
            x = xprediction;
            ...
        }
        ...
    }

    this.getXPrediction = function() {
        return x;
    }
})

я думаю, что имеет смысл провести дальнейший рефакторинг кода и, например, вызвать startgazer в методе run или сделать getXPrediction возвращает обещание, но приведенный выше пример может помочь вам начать работу. надеюсь, это поможет.

...