如何将来自service.js的内部查询结果绑定到Angular.js指令中的外部变量?

时间:2013-07-19 18:58:17

标签: javascript angularjs d3.js

使用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处理。必须有一个更简单的方法。有人可以帮我解决这个特殊情况吗?

1 个答案:

答案 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图作为控制器的范围属性,以确保它包含在角度的生命周期中。