使用angular-seed project: 在directives.js
中var names = [];
Animals.query(function(data){ // Animals.query() from service.js
console.log(data.Names); // output > [Object, Object..., Object]
names = data.Names; // attempt to bind to outer variable
});
console.log(names); // output > []
我可以看到那里的数据,但我需要在函数之外。我如何在功能之外得到它?的console.log(名称);在console.log(data.Names)之前发生; 我知道它与闭包和回调有关,我尝试了很多东西,但我似乎无法让它们为我的情况工作。我最终得到了一个不断扩展的函数混乱包含在函数中的回调函数,这些函数仍然没有绑定到外部变量。我不想'污染全局命名空间',但我需要在内部函数之外保留数据。最终目的是使数据可用于d3.js处理。必须有一个更简单的方法。有人可以帮我解决这个特殊情况吗?
答案 0 :(得分:1)
希望我不会误解你:你已经创造了(我假设)动物作为服务的功能。为什么不在指令范围的控制器中注入它?
如:
function Controller($scope, Animals){
$scope.names = [];
$scope.updateD3viz = function(){
// do your d3 stuff here
$scope.names = Animals.query(); // or whatever
}
}
可以从指令的$scope
方法访问 link(scope,elem,attrs)
。
我必须做类似的事情(角度和d3),我最终得到一个d3图作为控制器的范围属性,以确保它包含在角度的生命周期中。