【发布时间】:2017-02-15 01:39:59
【问题描述】:
我需要在子组件中更新数据以进行一些数学运算
我有我的父组件:
@Component({
selector: 'car-brand-index',
templateUrl: './index.component.html',
styleUrls: ['./index.component.scss'],
providers: [CarBrandService, Response, SessionService, ServerService, ListTableComponent, TableAction, Table, TableRow, TableRowField]
})
export class CarBrandIndexComponent implements OnInit {
table = new Table();
constructor(private mainService : CarBrandService) {
this.refresh(this.table.page,this.table.size);
}
refresh(pageNumber : number, pageSize : number){
this.mainService.get(pageNumber, pageSize).then(result => {
this.table.total = result.data.total;
});
}
在我看来:
<list-table [info]="table" (updateTable)="updateTable($event)"></list-table>
所以我将 var 表发送到组件列表表
在我的子组件中,我有
@Component({
selector: 'list-table',
templateUrl: './list-table.component.html',
styleUrls: ['./list-table.component.scss'],
providers: [ListTableService]
})
export class ListTableComponent implements OnInit {
@Input()
info: Table;
@Output()
updateTable = new EventEmitter();
pages : number[] = [];
constructor(public listTableService : ListTableService) {
}
updateFooter() {
if(this.info){
var amountofPages = this.info.total % this.info.size == 0 ? ( this.info.total % this.info.size ) : ( this.info.total % this.info.size ) + 1;
for(var i = 1; i <= amountofPages; i++){
this.pages.push(i);
}
}
}
ngOnInit(){
this.updateFooter();
}
}
问题在于:
var amountofPages = this.info.total % this.info.size == 0 ? ( this.info.total % this.info.size ) : ( this.info.total % this.info.size ) + 1;
key total 仍未定义,因为视图是在服务调用完成之前完成的。
我尝试用promise做刷新功能,但结果是一样的。有没有办法让我在将变量发送到子组件之前等待完成变量,或者子组件知道值何时更新以便它可以执行数学运算?
【问题讨论】:
-
使用已发布的可观察事件的服务。组件可以订阅这些事件,并在事件触发时执行数学运算。我认为 Flux 模式会对您有所帮助:stackoverflow.com/questions/42219858/…
-
我正在使用服务从后端获取所有数据...所以您的意思是我需要为子组件提供服务,以便父组件将信息存储在那里?但在我的情况下,数据正在更新,但 updateFooter() 函数在更新后不会触发。所以 var amountofPages 已经过时了
-
如果没有,我能做的就是对父级进行数学运算,然后发送最终值,这样我就不需要子级的任何函数,但不是最好的接近
-
抱歉,它可能不是您要找的答案。我认为它可能对您的情况有用,对您的服务进行一些返工。
-
你能解释一下基于我的代码的解决方案吗?谢谢!
标签: angular