Javascript 如何访问从同一控制器中服务块外部的api接收的数据

Javascript 如何访问从同一控制器中服务块外部的api接收的数据,javascript,angularjs,rest,Javascript,Angularjs,Rest,我使用的是Angular 1.7.8,我有一个控制器,它调用从API接收数据的服务,问题是,我无法访问同一控制器中服务块之外的数据 app.controller('AppController', function ($scope, DataService) { let fieldProperties = {}; $scope.findInData = function (value) { DataService.getData().then(function

我使用的是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对象以及范围在服务块之外是未定义的,请提供任何其他建议

您可以通过调用函数将结果返回给变量

$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>');
$scope.findInData=函数(值){
DataService.getData().then(函数(响应){
$scope.result=response.data;
if(response.data!==未定义){
for(让idx在$scope.result中){
if($scope.result.hasOwnProperty(idx)){
如果(值==$scope.result[idx].fieldname){
字段属性={
“fieldName”:$scope.result[idx].fieldName,
“preferredFieldName”:$scope.result[idx]。preferredFieldName,
“fieldValue”:$scope.result[idx].fieldValue,
“isEditable”:$scope.result[idx]。可编辑,
“isMandatory”:$scope.result[idx]。必填,
'isAutoClear':$scope.result[idx].autoclear
};
返回字段属性;
}
}
}
}
});
};
$scope.resultFieldProperties=$scope.findInData(“”);

否则,您需要有一个回调函数作为参数,它可以在完成时将数据返回给您。

您可以通过调用该函数将结果返回给变量

$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>');
$scope.findInData=函数(值){
DataService.getData().then(函数(响应){
$scope.result=response.data;
if(response.data!==未定义){
for(让idx在$scope.result中){
if($scope.result.hasOwnProperty(idx)){
如果(值==$scope.result[idx].fieldname){
字段属性={
“fieldName”:$scope.result[idx].fieldName,
“preferredFieldName”:$scope.result[idx]。preferredFieldName,
“fieldValue”:$scope.result[idx].fieldValue,
“isEditable”:$scope.result[idx]。可编辑,
“isMandatory”:$scope.result[idx]。必填,
'isAutoClear':$scope.result[idx].autoclear
};
返回字段属性;
}
}
}
}
});
};
$scope.resultFieldProperties=$scope.findInData(“”);

否则,您需要一个回调函数作为参数,它可以在完成时将数据返回给您。

您可以将数据存储在变量中。像这样

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

您可以访问整个控制器中的storedresult。

您可以将数据存储在变量中。像这样

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

您可以访问整个控制器中的storedresult。

不确定我是否理解正确,但如果您将
$scope.resultFieldProperties={'fieldName':$scope.result[idx].fieldName,…}
放入其中,它是否适用于您?因为
resultFieldProperties
始终是未定义的,因为
getData()
是异步的,需要时间才能完成。我不确定我是否理解正确,但是如果您将
$scope.resultFieldProperties={'fieldName':$scope.result[idx].fieldName,}
放在
中,它会与您一起工作吗?因为
resultFieldProperties
始终是未定义的,因为
getData()
是异步的,需要时间才能完成