Как получить доступ к данным, полученным от API за пределами сервисного блока в том же контроллере - PullRequest
0 голосов
/ 29 сентября 2019

Я использую Angular 1.7.8, и у меня есть контроллер, который вызывает сервис, который получает данные от API, проблема в том, что я не могу получить доступ к данным вне сервисного блока в том же контроллере.

app.controller('AppController', function ($scope, DataService) {

    let fieldProperties = {};

    $scope.findInData = function (value) {
        DataService.getData().then(function (response) {
            $scope.result = response.data;
            if (response.data !== undefined) {
                for (let idx in $scope.result) {
                    if ($scope.result.hasOwnProperty(idx)) {
                        if (value === $scope.result[idx].fieldname) {
                            fieldProperties = {
                                'fieldName': $scope.result[idx].fieldname,
                                'preferredFieldName': $scope.result[idx].preferredfieldname,
                                'fieldValue': $scope.result[idx].fieldvalue,
                                'isEditable': $scope.result[idx].editable,
                                'isMandatory': $scope.result[idx].mandatory,
                                'isAutoClear': $scope.result[idx].autoclear
                            };
                        }
                    }
                }
            }
        });
    };

    $scope.resultFieldProperties = fieldProperties;
});

Также хочу отметить, что непосредственное размещение $ scope для fieldProperties не является для меня решением, поскольку мне нужно отправить этот результат в директивную область, объект fieldProperties, так как область также не определена внеСервисный блок, любые другие предложения, пожалуйста!?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Вы можете хранить данные в переменной. Например,

  $scope.storedresult=$scope.findInData('value');

вы можете получить доступ к сохраненному результату во всем вашем контроллере.

1 голос
/ 30 сентября 2019

Вы можете вернуть результат в свою переменную, вызвав функцию

$scope.findInData = function (value) {
    DataService.getData().then(function (response) {
        $scope.result = response.data;
        if (response.data !== undefined) {
            for (let idx in $scope.result) {
                if ($scope.result.hasOwnProperty(idx)) {
                    if (value === $scope.result[idx].fieldname) {
                        fieldProperties = {
                            'fieldName': $scope.result[idx].fieldname,
                            'preferredFieldName': $scope.result[idx].preferredfieldname,
                            'fieldValue': $scope.result[idx].fieldvalue,
                            'isEditable': $scope.result[idx].editable,
                            'isMandatory': $scope.result[idx].mandatory,
                            'isAutoClear': $scope.result[idx].autoclear
                        };
                        return fieldProperties;
                    }
                }
            }
        }
    });
};

$scope.resultFieldProperties = $scope.findInData('<some_value>');

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...