我复制了一个简单的stackblitz,演示了我遇到的问题。问题是我有一个父组件将布尔值传递给子组件。这个布尔值是子组件上的@Input。需要注意的是,父组件使用ChangeDetectionStrategy.OnPush。子组件没有显式设置。
当父组件在订阅方法中更改子组件的布尔输入属性时,子组件最初不会检测到更改。总是需要单击 2 次才能让子组件检测到更改。
但是,当我在订阅方法之外更改子组件的布尔输入属性时,子组件会正确检测到更改,并且一切都会按预期工作(单击 1 次子组件即可识别更改)。
App.Component.ts(父组件)
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent {
constructor(private http: HttpClient) {
}
public isHelloVisible: boolean;
public useHttpGet: boolean;
showHello() {
if (this.useHttpGet) {
this.http.get('https://cors-anywhere.herokuapp.com/https://api.darksky.net/forecast/cc0e3799790b0b34bdeb6fef28c3daf7/17.447409200000003,-78.3724573?units=si').subscribe(data => {
this.isHelloVisible = true;
});
} else {
this.isHelloVisible = true;
}
}
closeHello() {
this.isHelloVisible = false;
}
Run Code Online (Sandbox Code Playgroud)
子组件(Hello.component.ts)
@Component({
selector: 'hello',
template: `<div *ngIf="showHello">
Hello
<div (click)="closeHello()">Click me to close Hello</div>
</div>
`, …
Run Code Online (Sandbox Code Playgroud) 我在使用Moq库来模拟项目中的Enum时遇到了问题.我正在尝试测试一个类,其中一个方法接受一个ENum.有没有办法做到这一点?
这是我试图嘲笑的Enum:
public enum PermissionType
{
Create = 0,
Read = 1,
Update = 2,
Delete = 3,
}
Run Code Online (Sandbox Code Playgroud)
这是我试图用来创建模拟的代码:
private static Mock<PermissionService> GetMockPermissionService(bool hasPermissions)
{
var mockPermissionService = new Mock<PermissionService>();
mockPermissionService.Setup(x => x.HasPermission(It.IsAny<string>(),
**It.IsAny<PermissionType>()**)).Returns(hasPermissions);
return mockPermissionService;
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
System.ArgumentException:不可覆盖的成员上的无效设置:x => x.HasPermission(It.IsAny(),It.IsAny())
我也尝试过:
mockPermissionService.Setup(x => x.HasPermission(It.IsAny<string>(),
**It.IsAny<int>()**)).Returns(hasPermissions);
mockPermissionService.Setup(x => x.HasPermission(It.IsAny<string>(),
**PermissionType.Read**)).Returns(hasPermissions);
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激...
我遇到了与运行IIS7的64位Windows Server 2008服务器上的经典asp应用程序执行.Net dll相关的问题.情况如下:
我编写了一个.Net C#程序集来执行一些加密任务.通过从ServicedComponent继承,可以将此程序集用于传统ASP环境,确保assemblyinfo文件具有ComVisible(true)属性,并且已使用"regsvcs"命令行进行安装.
在我自己的桌面上测试(运行IIS6的XP)一切正常.迁移到IIS 7,Windows Server 2008时,我得到了臭名昭着的"ASP 0177 Server.CreateObject failed".
我试过以下无济于事:
这个问题是密切相关的这一个.但是,我认为这个问题与使用服务器上的工具更相关,而不是与我类似的程序问题.
任何人都有更多想法尝试?
希望这个虚构的例子能说明我的问题:
假设您正在编写一个跟踪软件产品投诉的系统,以及该产品的许多其他属性.在这种情况下,SoftwareProduct是我们的聚合根,而投诉是只能作为产品子项存在的实体.换句话说,如果软件产品从系统中删除,那么投诉也是如此.
在系统中,有一个类似于网页的仪表板,它显示单个SoftwareProduct的许多不同方面.仪表板中的一个部分以时尚网格显示投诉列表,仅显示每个投诉的一些非常高级别的信息.当管理员类型用户选择其中一个投诉时,会将其定向到编辑屏幕,以便他们编辑单个投诉的详细信息.
问题是:编辑屏幕检索单个投诉的最佳方式是什么,以便可以显示它以进行编辑?请记住,我们已将SoftwareProduct建立为聚合根,因此不应允许直接访问Complaint.此外,系统正在使用NHibernate,因此急切加载是一个选项,但我的理解是,即使通过SoftwareProduct急切加载单个投诉,只要访问Complaints集合,就会加载其余的集合.那么,如何通过SoftwareProduct获得单一投诉,而不会产生加载整个投诉集合的开销?
64-bit ×1
angular ×1
asp-classic ×1
c# ×1
enums ×1
iis-7 ×1
mocking ×1
moq ×1
nhibernate ×1
observable ×1