我在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();
}
答案 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();
}