मैं अपने आवेदन में एक सुपर जेनेरिक एपीआई रिज़ॉल्वर बनाना चाहता हूं। मुझे इस समाधानकर्ता का उपयोग करने के लिए सभी "GET" अनुरोध चाहिए, संभवतः इसे भविष्य में अन्य क्रियाओं तक विस्तारित करें। मैं यूआरएल और अनुरोध की क्रिया को रिज़ॉल्वर को पास करने में सक्षम होना चाहता हूं और फिर वहां से फ़ंक्शन कॉल करने में सक्षम होना चाहता हूं।

इस रिज़ॉल्वर का उपयोग किसी भी कोणीय मार्ग परिभाषा पर "आईडी" नामक एक परम के साथ किया जाएगा और मैं इस रिज़ॉल्वर के लिए रिटर्न प्रकार निर्दिष्ट करने में सक्षम होना चाहता हूं।

यह अवधारणात्मक रूप से मैं क्या करना चाहता हूं, लेकिन जाहिर है कि यह कोणीय के माध्यम से इंटरफ़ेस को लागू करने के कारण काम नहीं करता है।

export class ApiResolve<T> implements Resolve<T> {
  constructor(private _httpClient: HttpClient) { }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot, requestUrl: string, requestVerb: 'get'): Observable<T> {
    return this._httpClient.request<T>(requestVerb, `${requestUrl}/${route.data['id']}`);
  }
}

{ path: `user/:id`, component: UserComponent, resolve: { user: ApiResolver<User>('api.com/users', 'get') } }
2
mlangwell 26 मार्च 2020, 18:28

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि रिज़ॉल्वर को सूचना प्रसारित करने का एकमात्र व्यवहार्य तरीका मार्ग डेटा ऑब्जेक्ट का उपयोग करना है:

export class ApiResolve<T> implements Resolve<T> {
  constructor(private _httpClient: HttpClient) { }

  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):  {
    const resolverData = route.data.resolverData;
    return this._httpClient.request<T>(resolverData.method, `${resolverData.url}/${route.data['id']}`);
  }
}

{ 
  path: `user/:id`, 
  component: UserComponent, 
  resolve: { user: ApiResolver<User> },
  data: { resolverData: {url: 'api.com/users', method: 'get'}}
}
2
Guillaume 26 मार्च 2020, 16:11