0

使用angular-seed 项目: 在 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 > []

我可以在那里看到数据,但我需要它在函数之外。如何在函数之外获取它?控制台.log(名称);发生在 console.log(data.Names); 之前 我知道这与闭包和回调有关,我已经尝试了很多事情,但我似乎无法让它们适用于我的情况。我最终得到了一个不断扩展的函数,这些函数包裹在回调中,这些回调包裹在函数中,但仍然没有绑定到外部变量。我不想“污染全局命名空间”,但我需要保留内部函数之外的数据。最终目的是让数据可用于 d3.js 处理。必须有更简单的方法。有人可以帮我解决这个特殊情况吗?

4

1 回答 1

1

希望我没有误解你:你已经创建了(我假设)一个函数 Animals as a service。为什么不将其注入指令范围的控制器中?

如:

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

于 2013-07-19T20:28:45.767 回答