Angularjs控制器方法arg未定义

时间:2017-04-28 19:51:30

标签: javascript angularjs

我试图在页面上获取一个链接,基本上从数据库加载一个数据块,然后对该数据执行一个函数。从数据库中收集数据的方法是可行的(如果我在单击链接后在浏览器中单步执行,我可以看到它),问题是那个用于处理数据的方法将其视为' 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;。

有谁知道我做错了什么?谢谢!

3 个答案:

答案 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()
祝你好运