我正在使用角度2.我不明白设置变量。变量_isLoading在“this.observable.filter((event)”中设置但在模板中没有变化 这是代码ts:
<div class="app layout-fixed-header">
<sidebar-panel-left></sidebar-panel-left>
<header-navbar></header-navbar>
<div class="clearfix"></div>
<div class="main-panel">
<div class="main-content">
<spinner *ngIf="_isLoading"></spinner>
<span (click)='ChangeIsLoading(_isLoading)'>{{_isLoading}}</span>
</div>
</div>
<router-outlet></router-outlet>
</div>
这是模板:
@Injectable()
export class ApiService {
private _secureComponent: SecureComponent = new SecureComponent();
constructor(private http: Http) {
this._secureComponent.on('event1', (event)=>{
});
}
setLoaderAnimation(isLoading) {
this._secureComponent.broadcast({
name: 'setLoading',
isLoading: isLoading
});
}
public apiGet(url) {
this.setLoaderAnimation(true);
return new Promise((response, reject) => {
let options = new RequestOptions({ method: RequestMethod.Get, headers: this.getHeaders() });
this.http.get(url, options).toPromise()
.then((value) => {
response(value.json());
this.setLoaderAnimation(false);
}).catch(function (value) {
reject(value);
});
});
}
}
这是ApiService(从服务器获取数据然后变量更改值):
class RowProxy {
private:
int* row;
public:
explicit RowProxy(int* row) : row(row) {}
int& operator[](int y) {
return row[y];
}
};
class A2D {
private:
int a[10][10]; // This is irrelevant - it's just to simplify the example
public:
RowProxy operator[](int x) {
return RowProxy{a[x]};
}
};
答案 0 :(得分:0)
当您希望子组件自动设置值并刷新时,设置值非常有用。在这里,您希望组件显示加载与否。第一个错误是在服务中声明那些var。服务必须返回promise或observable,以确保返回数据。因此,您最好更改加载变量位置以将其放入组件中。您可以在http get或返回响应时更改它。
为了使你的情况更清楚,创建一个组件来从主组件(将获取数据的人)调用并创建一个var _myVar和一个
@Input set myVar(data: type) { this._myVar = data }
每次父母修改其值时,您的子组件都可以拥有独立的行为(isLoading)
<app-child [myVar]="isLoading"></app-child>
只需从管理加载的组件调用您的服务;)