我的情况:
我有一个组件显示tile,每个tile表示一个数组中的对象,该数组通过ngfor循环.单击一个图块时,我想将该对象传递给另一个组件,该组件负责在可以修改的字段中显示该对象的所有属性.
我尝试过的:
在做了一些研究并发现多个帖子向我展示了如何为父子层次结构实现这一点以及一些帖子解释为了实现想要的功能需要使用共享服务,我决定尝试设置这样的服务.
然而,我似乎没有得到的是当我应该导航到不同的路线.似乎导航在早期找到了位置,因为在详细信息组件中检索它时,传递给服务的对象是未定义的.
我的代码:
显示切片的组件具有以下功能,可将单击的对象传递给共享服务:
editPropertyDetails(property: Property) {
console.log('Edit property called');
return new Promise(resolve => {
this.sharedPropertyService.setPropertyToDisplay(property);
resolve();
}).then(
() => this.router.navigate(['/properties/detail'])
)
}
Run Code Online (Sandbox Code Playgroud)
共享服务具有设置属性对象的功能和检索它的功能,如下所示:
@Injectable()
export class SharedPropertyService {
// Observable
public propertyToDisplay = new Subject<Property>();
constructor( private router: Router) {}
setPropertyToDisplay(property: Property) {
console.log('setPropertyToDisplay called');
this.propertyToDisplay.next(property);
}
getPropertyToDisplay(): Observable<Property> {
console.log('getPropertyToDisplay called');
return this.propertyToDisplay.asObservable();
}
}
Run Code Online (Sandbox Code Playgroud)
最后是必须接收被单击的对象但获取未定义对象的detail组件:
export class PropertyDetailComponent implements OnDestroy {
property: Property;
subscription: Subscription;
constructor(private sharedPropertyService: SharedPropertyService) {
this.subscription = this.sharedPropertyService.getPropertyToDisplay()
.subscribe(
property …Run Code Online (Sandbox Code Playgroud) 在尝试执行HTTP Post请求时,我收到以下错误:
auth.service.ts?c694:156请求新密码时出错了,错误消息:您提供了"未定义",其中包含预期的流.您可以提供Observable,Promise,Array或Iterable.
Http请求之前是另一个请求,它完全正常.
我的组件调用服务:
requestNewPassword(formInput: NgForm) {
if(formInput.controls['email'].value != '')
this.authService.getApplicationAccessToken()
.mergeMap((response: IAuthAppResponse) => this.authService.requestNewPassword(formInput, response.access_token))
.subscribe(response => {
// Content removed for simplicity
})
}
Run Code Online (Sandbox Code Playgroud)
抛出错误的服务方法:
public requestNewPassword(formData: NgForm, applicationAccessToken: string): Observable<any> {
let headers = new HttpHeaders({
'Authorization':'Bearer ' + applicationAccessToken
});
let email: string = formData.controls['email'].value;
const body = {
email: email
};
console.log('requestNewPassword call header: ' + headers.get('Authorization'));
console.log('Email: ' + body.email);
return this.http.post(this.baseUrl + '/api/user/password/forgot', body, {headers}).do(response => {
console.log("New password was successfully sent …Run Code Online (Sandbox Code Playgroud) 我正在使用 Camera2 API 构建自定义相机。到目前为止,除了预览有时会失真之外,相机工作得很好。假设我连续打开相机 7 次。所有尝试均成功,但第 8 次相机预览失真。看起来它使用宽度作为高度,反之亦然。
我的代码基于camera2 的Google 示例实现,可以在此处找到。有趣的是,即使是 Google 示例实现有时也会出现这种扭曲的预览。我尝试修改 AutoFitTextureView 但没有成功。我目前正在使用 Google 再次提供的 AutoFitTextureView.java 。
可以在此处找到与此类似的帖子。然而,所提出的修复方案并没有解决问题。
我可以通过更改 setUpCameraOutputs 方法中的以下内容来重现该问题:
mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth());
Run Code Online (Sandbox Code Playgroud)
到:
mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight());
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的事情是,每当预览失真时,您只需按主页按钮,应用程序就会进入 onPause() 并再次打开应用程序,以便调用 onResume() ,每次预览都是完美的。
这里有人遇到过这个问题并找到解决办法吗?
提前致谢
如标题所示,我正在使用OAuth身份验证开发Angular 4项目。
每当http请求以状态代码401响应时,我都会拦截该请求,更新访问令牌并重试失败的请求。
当我收到401消息时,请求将被正确拦截,访问令牌将按应有的方式刷新。失败的请求也将再次执行,但不再将其响应传递给组件。
因此,问题在于应该在刷新令牌和重试请求之前,应在请求响应上观察的我的组件抱怨该视图的日志“接收属性错误”。
我的拦截器:
import { Injectable, Inject, Injector } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpResponse,
HttpErrorResponse,
HttpEvent,
HttpInterceptor,
HttpSentEvent,
HttpHeaderResponse,
HttpProgressEvent,
HttpUserEvent
} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { AuthService } from './auth.service';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { TokenManager } from '../../../util/TokenManager';
import { AuthUserResponse } from '../../../models/authUserResponse';
import 'rxjs/add/operator/switchMap';
@Injectable()
export class AuthTokenExpiredInterceptor implements HttpInterceptor {
isRefreshingToken: boolean = false;
tokenSubject: BehaviorSubject<string> = new BehaviorSubject<string>(null);
constructor( private injector: …Run Code Online (Sandbox Code Playgroud)