-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
st的graphql数据源 #1992
Comments
Translation of this issue:ST GRAPHQL data sourceWhat proBLEES THIS Feature SOLVE?Related Issue #1294 ng-alain/delon#1234 Although new Using graphql in NG usually uses the code generator as follows:
Schema { TYPE Query { ENUM ROLE { Interface node { Union searchResult = user | chat | chatmessage TYPE User IMPLEMENTS NODE { TYPE CHAT IMPLEMENTS NODE { TYPE CHATMESSAGE IMPLEMENTS NODE {
Fragment Userfields on User {
Export Type Query = { Export type queryUserargs = { EXPORT TYPE Querysearchargs = { Export enum role { EXPORT TYPE NODE = { Export Type SearchResult = User | Chat | ChatMessage; Export Type User = Node & { Export Type chat = node & { Export type chatmessage = node& { Export Type FindUserQueryvariables = Exact <{ Export Type FinduserQuery =
Export Type Userfieldsfragment = Export constterfieldsfragmentdoc = gql @Injectable ({
} ngoninit (): void {} Generator official website https://www.graphql-code-generator.com/ So What does The proposed API Look Like?Let the Data property receive GQL Service, continue to extend CustomRequest |
|
@cipchk 关于这个st数据加载行为重载的问题呢? 现实中graphql不是这样用的this.http.post(endpoint,{body:{query:'query{currentUser{username nickname}}'}}); 所以只是把原始的http请求拿出来也没法修改,就算修改了,也会导致apollo client处理出错 现实中graphql是这样用的this.currentUserGQL.fetch() graphql客户端会根据查询和参数在内部生成相应的http请求,然后对返回值进行缓存等操作 |
@Diluka 我在 https://apollo-angular.com/docs/data/queries#basic-queries 中找到一个关于 Fetch 的查询请求,这里的直接返回一个: this.apollo.watchQuery<any>({ query: GET_POSTS }).valueChanges 给 |
@cipchk 但是分页问题怎么解决呢?这个请求怎么知道该翻到第二页了?还有就是能不能很好的适配export功能,目前都只能自己写个循环查询,把结果丢给export |
@cipchk 还有一点,关于返回这个 this.apollo.watchQuery<any>({ query: GET_POSTS }).valueChanges 还不如返回这个吧 this.apollo.watchQuery<any>({ query: GET_POSTS })
但是分页参数如何传这可能会稍微复杂一点,目前是 update 1不过这样侵入度太高了,还不如最开始说的,一个回调或者适配器接口,提供分页查询等相关参数,返回一个st接受的数据结果(提供一个结果接口) update 2从最初的设想上来说,目前不是可以把一个restful api传给data么? <st [data]="url"></st> 相当于内部有一个 如果按着思路提供一个 <st [data]="listGQL" [adapter]="stApolloDataAdapter"></st> 岂不是就可以解决graphql数据加载问题了,而且 基于这样的数据适配器接口,各种各样的数据加载都可以在st上实现了。 |
事实上,这个问题更像是 Hot 与 Cold 的 Observable 处理, 而这里 Apollo 更像是一种推送数据,例如使用 基于上述,我建议 Apollo 作为数据源,与 feedQuery: QueryRef<any>;
feedQuery = this.apollo.watchQuery<any>({ query: GET_POSTS });
this.feed = this.feedQuery
.valueChanges
.subscribe(({data}) => {
this.list = data.feed;
this.total = data.total;
});
// 对于分页处理配合 change 事件完成
this.feedQuery.fetchMore(...);
// 最终
<st [data]="list" [total]="total"></st>
|
现在就是这么干的,当成本地数据,通过change修改参数加载新数据。但是这样发现一个问题,使用st.export时,st会认为是本地数据,而只导出当前页。
EL PSY CONGROO
… 在 2021年6月3日,下午7:42,卡色 ***@***.***> 写道:
事实上,这个问题更像是 Hot 与 Cold 的 Observable 处理,st 内置为了兼容本地数据与HTTP请求数据,始终都是构造一个 Observable 并订阅一次结果然后扔掉它。
而这里 Apollo 更像是一种推送数据,例如使用 watchQuery 构造一个 Observable 在使用上可以利用 fetchMore 等再一次推着数据,站在 Graphql 角度上的确更舒服。但对于 st 而言,基本上很难保持两种模式的兼容。
基于上述,我建议 Apollo 作为数据源,与 st 配合直接使用本地数据的方式,这样会更合理。一段伪代码:
feedQuery: QueryRef<any>;
feedQuery = this.apollo.watchQuery<any>({ query: GET_POSTS });
this.feed = this.feedQuery
.valueChanges
.subscribe(({data}) => {
this.list = data.feed;
this.total = data.total;
});
// 对于分页处理配合 change 事件完成
this.feedQuery.fetchMore(...);
// 最终
<st [data]="list" [total]="total"></st>
若配合 customRequest 可以对代码进一步精简,每一次函数触发都会包含所有参数包含 pi 等。
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
即便非本地数据源,也只会导出当前页,默认情况下,如果需要全量数据,还是需要手动提供相应的数据源的。 |
呃,原来是这样,emmm,看来新增一个st根据某个最大分页循环加载所有数据或者某个上限的导出功能看起来会很香,关于导出这个我建个新的issue |
之前尝试使用过 再者,关于graphql客户端,虽然apollo客户端目前看起来使用广泛,但是客户端并不局限这一种。分页方式虽然有relay的规格说明,但是对于graphql本身来说也不是强制的。所以我们也不能着眼于适配某个具体客户端的api,而之前提到的适配器的引入,让st的用户自行开发相应的处理程序,其实对整体代码来说才是更加精简。或者全局再加上一个决策器,对于适配器的选择会更加精简,根据 |
What problem does this feature solve?
相关issue #1294 ng-alain/delon#1234
虽然新增了
customRequest
配置,但是graphql在应用层调用并不是基本的http请求,这个配置对于graphql来说没有实质作用。在ng中使用graphql通常会使用代码生成器,如下:
生成器官网 https://www.graphql-code-generator.com/
所以
FindUserGQL
这个service是没法传给st使用customRequest
的,需要一个更加灵活的配置What does the proposed API look like?
让data属性可以接收GQL service,继续扩展customRequest
The text was updated successfully, but these errors were encountered: