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