我将映射定义定义为
Mapper.CreateMap<Calculator, CalculatorViewModel>()
.ForMember(dest => dest.TypeIndicator, src => src.ResolveUsing(new TypeIndicatorResolver()));
Run Code Online (Sandbox Code Playgroud)
我应该使用ResolveUsing还是MapFrom(src => SomePrivateMethod())?
ResolveUsing和MapFrom在复杂映射方面有什么区别.
Resolver或Private方法将转到数据库并获取值.
你能告诉我如何测试Angular 4提供的HttpInterceptor.我根据例子创建了一个拦截器,但不知道如何测试它.下面是我的拦截器,我想测试是否添加了自定义标头以及何时完成响应状态为401 window.location.href.
export class MyInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const headers = new HttpHeaders();
this.addHeader(headers); // This will add headers
const changedReq = req.clone({ headers: headers });
return next.handle(req)
.catch(err => {
if (err instanceof HttpErrorResponse) {
switch (err.status) {
case 302:
case 401:
window.location.href = "http//google.com";
break;
default:
throw new Error(this.getErrorMessage(err));
}
}
return Observable.throw(err);
});
}
Run Code Online (Sandbox Code Playgroud) 我正在使用ngrx库并且有这样的效果
@Effect()
loadCollection$: Observable<Action> = this.actions$
.ofType(authAction.GET_USER)
.startWith(new authAction.GetUserAction()) // call on app load
.switchMap(() =>
this.service.getUser()
.mergeMap((user: User) => [
new authAction.GetUserCompleteAction(user),
new navigationAction.GetLinksCompleteAction(user.role)
])
);
Run Code Online (Sandbox Code Playgroud)
我正在为它编写规范,它看起来像这样
actions = new ReplaySubject(2);
actions.next(new auth.GetUserAction());
effects.loadCollection$.subscribe(result => {
expect(service.getUser).toHaveBeenCalled();
expect(result).toEqual(new navigation.GetLinksCompleteAction('test')); --> this line fails
});
Run Code Online (Sandbox Code Playgroud)
我怎么能期望在合并映射中调用多个动作.
我是线程和异步编程的新手.我正在努力学习这些概念,到目前为止,我理解它,但有一个问题要问.
假设我想调用一个名为GetAllUsers()的方法,这种方法需要很长时间才能执行,因为它不会阻塞资源并保持UI响应.所以,我的理解是它可以通过3种方式完成(请告诉我这些是否正确或我完全弄错了): -
1)线程:我可以生成一个新线程并将GetAllUsers方法作为线程启动.这将在不同的线程上开始执行该方法,保持我的ui响应,并且当调用完成时,我可以使用路由技术来更新UI控件,即InvokeRequired.我的理解是否正确?
要么
2)异步代理:我可以创建一个委托.创建它的新实例并将其指向方法GetAllUsers.然后使用BeginInvoke方法.引擎盖下的BeginInvoke将生成一个新线程并运行我的方法,保持UI响应.调用完成后,将调用回调方法,并再次使用路由技术更新GUI线程上的控件.我的理解是否正确?
要么
3)异步/等待:将外部方法标记为异步,并将对方法GetAllUsers的调用标记为等待.这也将保持UI响应,因为运行它的线程可以跳出并执行一些其他工作,直到调用此慢速方法完成.我的理解是否正确?
现在,问题是 - 如果您阅读下面链接的第2段,它表示async/await不会导致创建其他线程.那么async/await如何设法提供与上面第一个2solution相同的输出而不创建任何额外的线程.解决方案1和2将导致多线程,但异步解决方案不会.async/await如何在引擎盖下工作.
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx#BKMK_Threads
以前我可以测试以下商店选择
this.store.select(fromRoot.someselector).pipe(map(r => this.store.dispatch(new Action())));
Run Code Online (Sandbox Code Playgroud)
这是我的测试中的
{provide: Store, useValue: jasmine.createSpyObj('store', ['select']);
store.select.and.returnValue(of({}));
Run Code Online (Sandbox Code Playgroud)
但现在已经变成管道了
this.store.pipe(select(fromRoot.someselector));
this.store.pipe(
select(fromRoot.someselector),
filter(result => !!result),
map(r => {
if (result === ' hello') {
this.store.dispatch(new Action());
}
}
));
Run Code Online (Sandbox Code Playgroud)
如何测试这一点,特别是当您在选择后有地图并且在其中您正在调度一个操作并且您希望验证操作被调用时。
我试图扩展基类并得到以下错误:
类'DerivedProduct'错误地扩展了基类'BaseProduct'.
类型具有私有属性"路由"的单独声明.
基类:
export class BaseProduct {
constructor(private route: ActivatedRoute, private store: Store<fromState>){}
}
Run Code Online (Sandbox Code Playgroud)
派生类:
export class DerivedProduct extends BaseProduct {
constructor(private route: ActivatedRoute, private store: Store<fromState>){}
}
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?
我正在使用 Angular Material 和 Angular Google Maps。我在 Snazzy-Info-Window 中有一个 Angular Material 表单,它在正常模式下工作正常。它很好地显示了 mat-select,但是当我单击全屏按钮时,mat-select 中的 mat-options 不显示。一旦我退出全屏模式,我就会看到选项面板。
这是一个错误还是我错过了什么。如果我使用本机选择而不是 mat-select,则会显示下拉选项。
正常模式
全屏模式
在谷歌地图的全屏模式下,mat-select 不显示面板,但当我检查它时它就在那里。
我是 React 的新手,正在尝试使用嵌套路由创建布局。这是我的场景
在浏览器中访问 URL 时,登录页面和仪表板页面会正确加载,但对于 /dashboard/profile,浏览器会转到空白页面,而不是将其加载到仪表板组件中。
索引.js
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
应用程序.js
class App extends Component {
render() {
return (
<div>
{/* <Switch> */}
<Route exact path='/' component={SignIn}/>
<Route exact path='/dashboard' component={Dashboard}/>
{/* </Switch> */}
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
仪表板.js
class Dashboard extends React.Component {
render() {
const { classes } = this.props;
return (
<React.Fragment>
<CssBaseline /> …Run Code Online (Sandbox Code Playgroud) 我有这样的终点
/profiles/1
Run Code Online (Sandbox Code Playgroud)
我想获取ID为1的配置文件,但同时将访问的属性增加1。该属性作为对象的一部分出现。我应该使用哪个HTTP动词来获取访问属性增加1的配置文件对象。
每次获取ID为1的配置文件时,访问的属性都会增加1。
angular ×3
ngrx ×2
typescript ×2
async-await ×1
automapper ×1
delegates ×1
http ×1
http-verbs ×1
jasmine ×1
react-router ×1
reactjs ×1