Javascript Angularjs控制器方法arg未定义

Javascript Angularjs控制器方法arg未定义,javascript,angularjs,Javascript,Angularjs,我试图在页面上获得一个链接,基本上从数据库加载一个数据块,然后对该数据执行一个函数。从数据库中收集数据的方法是有效的(如果单击链接后在浏览器中单步执行,我可以看到它),问题是,用于处理数据的方法将其视为“未定义”……对我来说,这似乎是一个范围界定问题,但我不确定我做错了什么。目前我在processData方法中只有一条控制台日志消息,直到我可以解决这个问题。以下是链接的HTML: <div ng-show="Base" > <a data-toggle="collaps

我试图在页面上获得一个链接,基本上从数据库加载一个数据块,然后对该数据执行一个函数。从数据库中收集数据的方法是有效的(如果单击链接后在浏览器中单步执行,我可以看到它),问题是,用于处理数据的方法将其视为“未定义”……对我来说,这似乎是一个范围界定问题,但我不确定我做错了什么。目前我在processData方法中只有一条控制台日志消息,直到我可以解决这个问题。以下是链接的HTML:

<div ng-show="Base" >
    <a data-toggle="collapse" data-parent="Base" ng-click="processData(getDataFromDb('key101'))">Process Data</a>
</div>
最终的结果是,当单击链接时,调用getDataFromDb并从数据库中提取数据,这部分工作正常,只是当调用processData并将getDataFromDb返回作为其参数时,当我设置断点并查看processData中的'data'参数时,它是'undefined'


有人知道我做错了什么吗?谢谢

模板:

<div ng-show="Base" >
    <a data-toggle="collapse" data-parent="Base" ng-click="processData('key101')">Process Data</a>
</div>
angular.module('baseApp')
 .controller('dataProcessor', function($scope, $http) {
    $scope.getDataFromDb = function(key) {
        return $http.get('/trm/get_data_from_database?key='+key).then(function(response) {
            return response.data.block;
        }, function errorCallback(response) {
                console.log('Failed')
        });
    };
    $scope.processData = function(key) {
        $scope.getDataFromDb(key)
          .then(function(data){
             console.log(data); 
          });
    };
 });

模板:

<div ng-show="Base" >
    <a data-toggle="collapse" data-parent="Base" ng-click="processData('key101')">Process Data</a>
</div>
angular.module('baseApp')
 .controller('dataProcessor', function($scope, $http) {
    $scope.getDataFromDb = function(key) {
        return $http.get('/trm/get_data_from_database?key='+key).then(function(response) {
            return response.data.block;
        }, function errorCallback(response) {
                console.log('Failed')
        });
    };
    $scope.processData = function(key) {
        $scope.getDataFromDb(key)
          .then(function(data){
             console.log(data); 
          });
    };
 });
更改:

$http.get('/trm/get_data_from_database?key='+key).then(function(response) {
    return response.data.block;
}, function errorCallback(response) {
        console.log('Failed')
});

更改:

$http.get('/trm/get_data_from_database?key='+key).then(function(response) {
    return response.data.block;
}, function errorCallback(response) {
        console.log('Failed')
});


不,这不是范围问题,您不能从http返回数据,您必须在resolve函数中处理所有业务。这是非常合乎逻辑的,因为当您执行GET函数时,您不会立即获得数据,还有一段时间服务器响应返回,这意味着processData函数将在服务器响应返回之前执行

所以你应该这样做:

angular.module('baseApp').controller('dataProcessor', function($scope, $http) {
    $scope.getDataFromDb = function(key) {
        $http.get('/trm/get_data_from_database?key='+key).then(function(response) {
            $scope.processData(response.data.block);
        }, function errorCallback(response) {
                console.log('Failed')
        });
    };
});

祝您好运

不,这不是作用域问题,您不能从http返回数据。您必须在resolve函数中处理所有业务。这是非常合乎逻辑的,因为当您执行GET函数时,您不会立即获得数据,还有一段时间服务器响应返回,这意味着processData函数将在服务器响应返回之前执行

所以你应该这样做:

angular.module('baseApp').controller('dataProcessor', function($scope, $http) {
    $scope.getDataFromDb = function(key) {
        $http.get('/trm/get_data_from_database?key='+key).then(function(response) {
            $scope.processData(response.data.block);
        }, function errorCallback(response) {
                console.log('Failed')
        });
    };
});

祝您好运

$scope.getDataFromDb=function(key){
是一个异步函数,因此您的返回没有任何作用,并且您的参数从未正确传递。请参阅:
$scope.getDataFromDb=function(key){
是一个异步函数-因此您的返回没有任何作用-并且您的参数从未正确传递。请参阅:是的,@ajai Jothi Saidinges说了什么,@ajai Jothi说了什么