我在html中使用指令,我在指令'链接中发送带有$ http的ajax,然后在chrome的控制台中发送console.log(scope.data)
,undefined
这是我的代码
todoApp.directive('planProgress', function($http) {
return {
scope: false,
link: function(scope, elem, attrs) {
$http.get('get_default_data', {
params: {
'type': 'day'
}
}).then(function(data) {
scope.data = data.data;
});
console.log(scope.data);
elem.progress();
}
};
});
我console.log(scope.data)
它的undefined
但是,范围内有data
个attr,
如何在范围内获取数据?
答案 0 :(得分:0)
在console.log
内打印.then
。由于$http
是async
。 JS不会等待它完成并执行下一行,因此你得到undefined
.then(function(data) {
scope.data = data.data;
console.log(scope.data);
});
答案 1 :(得分:0)
分解你的链接功能
$http.get('get_default_data', {
params: {
'type': 'day'
}
}).then(function(data) {
scope.data = data.data;
});
console.log(scope.data);
elem.progress();
您可以看到,console.log
是直接运行的,而http调用是延迟的。因此,它将记录“未定义”,并且当调用返回scope.data
时将具有值。
如果要查看检索的内容,请将“console.log”放入then
。
但是在您的模板中,您只需访问{{data}}
即可。
答案 2 :(得分:0)
$ http是异步方法所以你的控制台会在那之前运行,所以尝试在你的块中添加,因为阻止总是在成功完成你的响应后运行
试试这个,你就会明白为什么它正在记录正确的值
todoApp.directive('planProgress', function($http) {
return {
scope: false,
link: function(scope, elem, attrs) {
$http.get('get_default_data', {
params: {
'type': 'day'
}
}).then(function(data) {
scope.data = data.data;
console.log(scope.data);
});
elem.progress();
}
};
});