在我的控制器中,我调用一个返回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不可用??
答案 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;
});
}