如何在AngularJS回调中设置变量?

时间:2016-08-21 01:33:24

标签: angularjs

我有一个AngularJS 1.5指令:

var assetSearchService = function(proService) {
    var assets = [];

    var searchAssets = function(searchTerm){
        proService.searchAssets(searchTerm).then(function(data){
            assets = data.data;
        });
    };

    return {
        searchAssets, searchAssets,
        assets: assets
    };
};

当我在调用搜索后尝试在我的控制器中使用assetSearchService.assets时,数据未在assetService.assets中设置。

如果我在searchAssets承诺返回后记录数据,我将获取数据。

this.assets不起作用,所以如何从回调中获取变量?

2 个答案:

答案 0 :(得分:1)

找到答案。 assets = newArrayconact都不起作用,因为它们都返回一个新数组并中断引用,而不是修改当前引用。

这有效:

Array.prototype.push.apply(assets, data.data);

以下是一个工作示例:https://jsfiddle.net/mbaranski/5k4bqo0z/

答案 1 :(得分:0)

您可以实现更复杂的解决方案

var assetSearchService = function(proService) {
  service = this;
  service.assets = [];

  service.searchAssets = function(searchTerm){
    proService.searchAssets(searchTerm).then(function(data){
        assets.push(data.data);
    });
  };

  return service;
};