我试图在页面上获取一个链接,基本上从数据库加载一个数据块,然后对该数据执行一个函数。从数据库中收集数据的方法是可行的(如果我在单击链接后在浏览器中单步执行,我可以看到它),问题是那个用于处理数据的方法将其视为' undefined& #39; ......这对我来说似乎是一个范围,但我不确定我做错了什么。目前我只是在processData方法中有一个控制台日志消息,直到我可以解决这个问题。以下是链接的HTML:
<div ng-show="Base" >
<a data-toggle="collapse" data-parent="Base" ng-click="processData(getDataFromDb('key101'))">Process Data</a>
</div>
以下是控制器方法(我不想在这里转储大量的HTML,但是我进一步使用ng-controller =&#34; dataProcessor&#34;来启动控制器):
angular.module('baseApp').controller('dataProcessor', function($scope, $http) {
$scope.getDataFromDb = function(key) {
$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(data) {
console.log(data);
}
});
最终结果是,当单击链接时,调用getDataFromDb并从数据库中提取数据,该部分有效,只是当调用processData并将getDataFromDb作为其arg返回时,当我设置断点并查看“数据”时arg在processData中,它是&#39; undefined&#39;。
有谁知道我做错了什么?谢谢!
答案 0 :(得分:2)
<强>模板:强>
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);
});
};
});
<强> contoroller:强>
string val = "aaa bbb ccc @ddd eee fff @ggg hh#iii. jj";
string[] values = val.Split(' '); //identify the separate entities you want split
val = "";//reset string to empty string
foreach(string a in values)
{
if (a.Contains('@') || a.Contains('#'))
val += a[0] + "MMM"; //change the values to 'M' of the original
else
val += a;
}
return val; //return the string with values changed to 'M'
答案 1 :(得分:0)
变化:
$http.get('/trm/get_data_from_database?key='+key).then(function(response) {
return response.data.block;
}, function errorCallback(response) {
console.log('Failed')
});
到
return $http.get('/trm/get_data_from_database?key='+key).then(function(response) {
return response.data.block;
}, function errorCallback(response) {
console.log('Failed')
});
答案 2 :(得分:0)
不,它没有确定范围问题,您无法从http获取承诺返回数据,您必须处理解析函数内的所有业务。这是非常逻辑的,因为你执行GET功能的时间你不会立即获得数据,有一段时间直到服务器响应回来,这意味着processData函数将在服务器响应之前执行。
所以你应该这样做:
cdss.remove()
祝你好运