Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2约束问题_Angular_Typescript - Fatal编程技术网

Angular 角度2约束问题

Angular 角度2约束问题,angular,typescript,Angular,Typescript,我来自c#world,刚接触Angular,所以这可能不是一个好方法,但是,我有一个向服务器提交大量命令的应用程序。然后,该操作是否成功将显示在客户端中。为了封装这一点,我编写了两个组件1)一个ObservablesCommandService,它订阅一个observable并在内部设置结果。2) ServerCommandStatus-用于显示结果的UI包装器: 1: @Injectable() 导出默认类ObservableCommandService{ 公共错误:布尔; 公共错误消息:字符

我来自c#world,刚接触Angular,所以这可能不是一个好方法,但是,我有一个向服务器提交大量命令的应用程序。然后,该操作是否成功将显示在客户端中。为了封装这一点,我编写了两个组件1)一个ObservablesCommandService,它订阅一个observable并在内部设置结果。2) ServerCommandStatus-用于显示结果的UI包装器:

1:

@Injectable()
导出默认类ObservableCommandService{
公共错误:布尔;
公共错误消息:字符串;
公开展示成功:布尔;
公共成功消息:字符串;
构造函数(){
this.hasErrors=false;
}
公共执行查询(op:可观察){
op.subscribe((响应)=>{
this.showSuccess=true;
this.successMessage=“Success:)”;
设置超时(()=>{
this.showSuccess=false;
this.successMessage='';
}, 4000);
},
(错误)=>{
this.errorMessage=`Error!发生错误:(状态代码${err.status}`;
this.hasErrors=true;
设置超时(()=>{
this.hasErrors=false;
this.errorMessage='';
}, 4000);
});
}
}
2:

@组件({
选择器:“服务器操作状态”,
提供者:[可观察服务]
})
@看法({
模板:`
{{observeService.errorMessage}
{{observeService.successMessage}
切换错误
`
})
导出类ServerCommandStatus{
私有ObserviceService:ObserviceCommand服务;
构造函数(observableService:ObservableCommand服务){
this.observateService=observateService;
}
公共切换错误(){
this.observateService.hasErrors=!this.observateService.hasErrors;
this.observeService.errorMessage=':*(发生了可怕的事情);
}
我的理解是,注射剂在Angular2中是单态的

此示例不起作用。所有代码都被调用并正确返回,但结果不会显示在服务器命令状态中

当我点击切换按钮-用于测试时,错误会正确切换

可观察对象从另一个组件放入服务中

这里好像没有更新绑定

这可能是一种奇怪的做事方式,因为我对Angular2还不熟悉,而且本身也很有棱角

如果有人能帮忙,我将非常感激

谢谢

@Injectable()
s不是单例。
提供者
是单例。
如果您想共享实例,请不要将其作为提供程序添加到任何地方,而是添加到公共父级或引导(AppComponent,[ObservableCommand Service])上,后者是根,因此是Angular应用程序中所有内容的公共父级。

@Injectable()
不是单例。
提供程序
是单例。
如果要共享实例,请不要将其作为提供者添加到任何地方,而是添加到公共父级或
bootstrap(AppComponent,[ObservableCommandService])
上,后者是应用程序中所有内容的根,因此是公共父级

@Injectable()
export default class ObservableCommandService {

    public hasErrors: boolean;
    public errorMessage: string;
    public showSuccess: boolean;
    public successMessage: string;

    constructor() {
        this.hasErrors = false;
    }

    public executeNonQuery(op: Observable<Response>) {
        op.subscribe((response) => {

        this.showSuccess = true;
            this.successMessage = "Success :)";

            setTimeout(() => {
                this.showSuccess = false;
                this.successMessage = '';
            }, 4000);
        },
            (err) => {

                this.errorMessage = `Error! An error occurred :( status code ${err.status}`;

                this.hasErrors = true;

                setTimeout(() => {
                    this.hasErrors = false;
                    this.errorMessage = '';
                }, 4000);

            });
    }

}
@Component({
    selector: 'server-operation-status',
    providers:[ObservableService]
})
@View({
        template: `
    <div [hidden]="!observableService.hasErrors">
        <div class="alert alert-danger">
            {{observableService.errorMessage}}
        </div>
    </div>

    <div [hidden]="!observableService.showSuccess">
        <div class="alert alert-success">
            {{observableService.successMessage}}
        </div>
    </div>

<button (click)="toggleError()">Toggle an Error</button>
`
})
export class ServerCommandStatus {
    private observableService: ObservableCommandService ;

    constructor(observableService: ObservableCommandService ) {
        this.observableService = observableService;
    }

    public toggleError() {
        this.observableService.hasErrors = !this.observableService.hasErrors;
        this.observableService.errorMessage = ':*( terrible things happened';
    }