我正在学习一个教程,以便在 Angular 中执行异步验证。我想要实现的是我的自定义验证器,它shouldBeUnique应该在 2 秒延迟后调用。我在其中使用setTimeout函数,但它不起作用。甚至错误消息未显示在 div 中。
这是我的自定义验证错误文件。
import { AbstractControl, ValidationErrors } from '@angular/forms';
export class UsernameValidator {
static cannotContainSpace(control: AbstractControl): ValidationErrors | null {
if ((control.value as string).indexOf(' ') >= 0 ) {
return { cannotContainSpace: true };
}
return null;
}
static shouldBeUnique(control: AbstractControl): Promise<ValidationErrors | null> {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (control.value === 'bilal') {
resolve({shouldBeUnique: true});
} else {
resolve(null);
}
}, 2000);
});
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 redux 状态保护路由。我在做什么是当用户的loggedIn我更新Redux的状态isAuthenticated在signIn组件和接受我的这种状态AllRoutes的组件,然后我在定制的路由传递它ProtectedHomeRoute作为道具。一切正常,但问题是当我刷新时,我得到的isAuthenticated值false是它的默认值,因此,ProtectedHomeRoute将我重定向到Login页面。
请建议我在上述用例中处理浏览器刷新的最佳方法。
我试图以这种方式解决这个问题,我做了一个名为isLoggedInthis 我正在调用 API 来检查登录状态的新动作,如果响应是那么我在有效负载中传递 true
然后我在componentDidMount生命周期中调用此操作,AllRoutes
以便在浏览器刷新时isLoggedIn将被调用并且无法获得以前的状态,但事情不会以这种方式发生。
这是isLoggedIn行动代码
export function isLoggedIn() {
axios.get("http://localhost:8080/api/checkLoginStatus").then(res => {
let data = res.data;
let tid = data.data; // data contain userId
console.log(tid);
let isAuthenticate = false
if(tid){
isAuthenticate = true;
}
return dispatch => {
dispatch({
type: "isLoggedIn",
payload: isAuthenticate
});
}; …Run Code Online (Sandbox Code Playgroud) javascript ×2
angular ×1
angular6 ×1
react-redux ×1
react-router ×1
reactjs ×1
redux ×1
typescript ×1