2

我正在尝试从 json 读取数据并等到数据被提取到 $scope.urls.content 中。所以我写代码:

$scope.urls = { content:null};
$http.get('mock/plane_urls.json').success(function(thisData) {
    $scope.urls.content = thisData;    
});

现在我正在尝试编写类似回调的东西,但这不起作用。我怎样才能做到这一点?或者有什么功能吗?我的想法不多了;/

4

2 回答 2

2

你是这个意思吗?

$http.get('mock/plane_urls.json').success(function(thisData) {
    $scope.urls.content = thisData;
    $scope.yourCallback();
});
$scope.yourCallback = function() {
   // your code
};
于 2013-07-19T13:45:00.347 回答
1

你想使用promises$resource

$http它本身返回一个承诺时,你所要做的就是链接到它的返回。就那么简单:

var promise = $http.get('mock/plane_urls.json').then(function(thisData) {
  $scope.urls.content = thisData;
  return 'something';
});

// somewhere else in the code
promise.then(function(data) {
  // receives the data returned from the http handler
  console.log(data === "something");
});

我在这里做了一个非常简单的小提琴。

但是如果你需要不断地调用这个信息,你应该通过服务公开它,这样任何人都可以获取它的结果并处理它。IE:

service('dataService', function($http) {
  var requestPromise = $http.get('mock/plane_urls.json').then(function(d) {
    return d.data;
  });

  this.getPlanesURL = function() {
    return requestPromise;
  };
});

// and anywhere in code where you need this info
dataService.getPlanesURL().then(function(planes) {
  // do somehting with planes URL
  $scope.urls.content = planes;
});

只是一个重要的说明。我嘲笑的这项服务将缓存并始终返回相同的数据。如果您需要多次调用此 JSON,那么您应该使用$resource

于 2013-07-19T15:27:46.603 回答