无法在控制器中访问$ scope变量

时间:2015-01-22 10:54:23

标签: javascript angularjs asynchronous angularjs-scope promise

在我的控制器中,我调用一个返回JSON对象的工厂:

function getData() {
    trainDataFactory.getData()
        .success(function (data) {
            $scope.dataList = data;
        })
        .error(function (error) {
            $scope.status = 'Unable to load data: ' + error.message;
        });
}

然后我可以在视图中访问$ scope.dataList(如果有效):

{{ dataList[0].UnitNumber }}

但我想在控制器中访问这个相同的变量,但它不起作用 - 角度只是中断。

我在控制器的开头尝试这个:

init();
function init() {
    getData();

    console.log($scope.dataList[0].UnitNumber);

    $scope.firstDataListItem = $scope.dataList[0].UnitNumber;
}

调用getData()所以我不明白为什么$ scope.dataList不可用??

1 个答案:

答案 0 :(得分:3)

getData()中的数据检索将异步执行 。在getData()执行完毕的那一刻,它不可用。

你需要使用承诺:

function getData() {
    return trainDataFactory.getData()
    .then(function (response) {
        return response.data;
    })
    .catch(function (error) {
        throw new Error('Unable to load data: ' + error.message);
    });
}

function init() {    
    getData().then(function (data) {
        $scope.dataList = data;
        console.log(data[0].UnitNumber);
        $scope.firstDataListItem = data[0].UnitNumber;
    })
    .catch(function (error) {
        $scope.status = error.message;
    });
}