Angular 如何刷新函数返回的参数

Angular 如何刷新函数返回的参数,angular,typescript,Angular,Typescript,我在DevExtreme数据源上遇到了问题,实际上这个问题已经发送给他们了,并且仍在讨论中。但我想知道我是否缺少一些基本的东西 DevExtreme引入了一个AspNetData源代码控件,使与.NETAPI的通信非常容易。它接受选项对象,您可以在其中定义其他参数。在我的场景中,我定义了firmaId loadParams,它通过函数获取值 函数getFirmaId只返回firmaId变量。 单击选项卡控制器可点击selectTabe函数。它为firmaId的成功提供了新的价值。但当我使用Dev

我在DevExtreme数据源上遇到了问题,实际上这个问题已经发送给他们了,并且仍在讨论中。但我想知道我是否缺少一些基本的东西

DevExtreme引入了一个AspNetData源代码控件,使与.NETAPI的通信非常容易。它接受选项对象,您可以在其中定义其他参数。在我的场景中,我定义了firmaId loadParams,它通过函数获取值

函数getFirmaId只返回firmaId变量。 单击选项卡控制器可点击selectTabe函数。它为firmaId的成功提供了新的价值。但当我使用DevExtreme客户端API加载数据源时,firmaId的loadParams始终为0。它是否按预期工作?在我看来,这与JavaScript的函数式编程概念相矛盾

谢谢你的帮助

firmaId: number;  

constructor(private dataService: DataService) {  

    this.firmaId = 0;

    this.dataSource = AspNetData.createStore({  
      key: "id",  
      loadUrl: Constants.apiRoot + "/api/cari/get",  
      insertUrl: Constants.apiRoot + "/api/cari",  
      updateUrl: Constants.apiRoot + "/api/cari",  
      deleteUrl: Constants.apiRoot + "/api/cari",  
      loadParams:  { firmaId : this.getFirmaId() },  
      onBeforeSend: function(method, ajaxOptions) {  
          ajaxOptions.xhrFields = { withCredentials: true };  
      }  
    });  
  }  

  getFirmaId():number{  
    return this.firmaId;  
  }  

  selectTab(e) {  

    this.firmaId = e.itemData.id;  
    this.dataSource.load();  

  }

让我们来看看这里发生了什么。构造函数激发并创建存储,调用this.getFirmId,此时返回0。选择选项卡后,将正确更新this.firmId并加载数据源

您遇到的问题是,当您调用this.dataSource.load时,它不太可能再次运行createStore,这意味着它永远不会调用this.getFirmId来更新该值。您可以通过登录getFirmId函数来确认这一点,以查看它是否正在启动。如果没有,您需要在再次调用load之前弄清楚如何更新数据源

selectTab(e) {  
  this.firmaId = e.itemData.id;
  // update param here 
  this.dataSource.load();  
}

你好,你完全正确。加载数据源时createStore未运行。如果我在selectTabe中再次创建Store,一切都会正常工作。我已经知道这个解决方案,但我不确定我是否创建了导致垃圾的不必要的对象。因为用户会多次单击Tab控件来选择不同的公司。你对此有什么想法吗?如果你每次都重写this.datasource,我无法想象这会是一个问题。他们可能会提供一种无需再次调用create即可更新的方法。我不熟悉该工具,所以idk,但如果不熟悉,您就必须这样做