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

时间:2019-12-30 18:08:15

标签: angular typescript

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

DevExtreme引入了AspNetData源控件,该控件使与.NET API的通信非常容易。它接受Options对象,您可以在其中定义其他参数。在我的场景中,我定义了“ firmaId” loadParams,它通过函数获取值。

函数“ getFirmaId()”仅返回“ firmaId”变量。 通过单击选项卡控制器,将选中selectTab(e)函数。成功为“ firmaId”赋予新值。但是,当我使用DevExtreme客户端API加载DataSource时,“ 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();  

  }

1 个答案:

答案 0 :(得分:1)

让我们逐步了解这里发生的事情。构造函数将触发,然后您创建存储,并调用this.getFirmId()并返回0。选择选项卡后,this.firmId已正确更新,并且您已加载数据源。

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

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