【问题标题】:Cannot update component variables inside Angular2 promise callback & ES6无法在 Angular2 Promise 回调和 ES6 中更新组件变量
【发布时间】:2017-08-11 17:36:07
【问题描述】:

当我尝试更新我的自定义组件的一个绑定模型时,我在 Angular2 网站上遇到了一些问题,它是对数据源的调整。

我的自定义服务中有以下内容:

public GetAllProcesses(): Promise<IProcess[]> {
    return this._http.get('api/processes')
                     .toPromise()
                     .then(response => response.json() as IProcess[])
                     .catch(this.handleError);
}

然后我在我的组件中完成了以下操作:

export class ProcessesDashboardComponent implements OnInit{

       bindedProcessesModel: any[] = [];

       constructor(private _mycustomservice: MyCustomService) {}

       ngOnInit() {
          this.obtainProcesses();
       }

       obtainProcesses(): void {
           this._mycustomservice.GetAllProcesses()
               .then((processesServiceData) => {

                 let bindedAdjustedProcesses: any[] = [];

                 for(let process of processesServiceData)
                 {
                   let singleProcessAdaptedData: any;

                    singleProcessAdjustedData= {
                      "Process": process.Name,
                      "Status": process.Status
                    };

                    bindedAdjustedProcesses.push(singleProcessAdjustedData);
                 }

                 return bindedAdjustedProcesses;
            })
            .then(bindedAdjustedProcesses=> this.bindedProcessesModel)
            .catch(errorMsg => {
                error = errorMsg;
                this.bindedProcessesModel = [];
            });
}

由于某种原因,我不明白我无法访问组件的变量,因为在任何回调部分中始终未定义“this”。你能帮忙解决我做错了什么吗?我能够正确检索数据,但它似乎无法将其分配给我的组件的变量。

【问题讨论】:

  • bindedAdjustedProcesses=&gt; this.bindedProcessesModel 我认为你不想放弃bindedAdjustedProcesses
  • 我正在开发 ES5,这可能是问题所在吗?在这种情况下应该有什么解决方法?
  • 我不确定你想要达到什么目标,但你可能想要bindedAdjustedProcesses=&gt; { this.bindedProcessesModel = bindedAdjustedProcesses;}
  • 我已经尝试过了,它会在浏览器中引发无限循环...我还尝试先投入使用,然后只在组件中收集响应,但效果不佳

标签: javascript angular ecmascript-6 promise angular2-services


【解决方案1】:

如果您想将 Promise 的结果分配给变量 bindedProcessesModel,您应该以这种方式调用 .then 方法:

.then((bindedAdjustedProcesses) => {
this.bindedProcessesModel = bindedAdjustedProcesses
})

【讨论】:

  • 这不起作用...问题在于回调中不存在“this”...
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2018-02-11
  • 2016-08-08
相关资源
最近更新 更多