Ответ функции контроллера AngularJS - PullRequest
0 голосов
/ 17 сентября 2018

мой контроллер ниже возвращает JSON через сервис, как показано ниже:

.controller('googleFormsCtrl', function ($scope, $http, $window, Userr,$timeout,$location) {
        // SEND THE HTTP REQUEST
        var url;
        var externalWindow;
        // MAKE API REQUEST for Authorization
        $http.get('/api/googleAuth').then(function (response) {
            url = response.data;
        });

        this.googleAuthentication = function () {
            externalWindow = $window.open(url, "Please Sign in with Google", "width:350px,height:350px");
        };
        // Close Authorization and set credentials
        window.onmessage = function (info) {
            externalWindow.close();
            // Get the URL
            var urlCode = info.data;

            // Get pure code of user
            var idx = urlCode.lastIndexOf("code=");
            var code = urlCode.substring(idx + 5).replace("#", "");

            // GET ALL FORMS
            Userr.getCredentials(code).then(function (res) {
                $scope.forms = JSON.stringify(res.data);

            });
        };

    }) 

Как видно выше, я получаю все формы в обратном вызове запроса, и мне нужно использовать их, чтобы поместить в меню параметров на другой странице, как показано ниже:

<div>
    <h2> Google Forms </h2>
</div>
<br>
<br>
<br>
<div id="selectForm">
    <div class="form-group">
        <br>
        <!--The Forms should be displayed below dynamically-->
        <h5>Select Google Form</h5>
        <select class = "form-control" ng-model="model.id"
                ng-options="form.id as form.name for form in forms" >
        </select>
        {{model.id}}
    </div>
    <button class="btn btn-default" type="submit">OK</button>
</div>

Именно поэтому я должен получить к ним доступ вне области действия функции. Мои данные из res.data выглядят так:

[{
            "id": "1o3FUAJAPsS2m93_ECkVtLcYbMaaWHk6UGHIFG-6lpyA",
            "name": "Normal Form"
        }, {
            "id": "1QB5MHWtXytLUqGHUH1Ac-V9fS7hHlCqSWXjq2iFz1Zk",
            "name": "Parti Davetiyesi"
        }];

Как я могу экспортировать эти данные за пределы функции? Любая помощь или подсказка приветствуется. Заранее спасибо.

1 Ответ

0 голосов
/ 18 сентября 2018

В любое время, когда вам нужно сделать что-то глобально доступным или, по крайней мере, доступным для нескольких контроллеров, вам нужно использовать фабрику или сервис.

Службы и фабрики являются синглетонами, и это означает, что после создания экземпляра они остаются в памяти на время жизни приложения.

(На самом деле всегда полезно внедрить в ваши службы какое-либо кэширование, чтобы не делать ненужных вызовов.)

Таким образом, результат запроса $http может быть присвоен служебной переменной:

        // GET ALL FORMS
        Userr.getCredentials(code).then(function (res) {
            $scope.forms = JSON.stringify(res.data);
            // to make this data availbale everywhere,
            // simply add the result to the service itself
            Userr.forms = res.data;
        });

Теперь, на каждом контроллере, который внедряет вашу службу Userr, у вас есть доступ к этим данным:

// in another controller
$scope.forms = Userr.forms;
...