这是我的服务
@Injectable()
export class JSTreeService {
constructor(private http: Http) {
}
// Uses http.get() to load a single JSON file
getData(): Observable<IDataItem[]> {
return this.http.get('url')
.map((res: Response) => res.json());
}
}
这是我的主要组件,我订阅了服务并将其传递给另一个服务,以将其传递到其他组件
@Component({
selector: 'app',
pipes: [],
providers: [JSTreeService, HTTP_PROVIDERS, SharedData],
directives: [],
encapsulation: ViewEncapsulation.None,
template: `
<header>
<md-toolbar color="primary">
<span>{{ name }}</span>
<nav>
<ul>
<li router-active>
<a [routerLink]=" ['Index'] ">Index</a>
</li>
|
<li router-active>
<a [routerLink]=" ['Home'] ">Home</a>
</li>
|
<li router-active>
<a [routerLink]=" ['About'] ">About</a>
</li>
|
<li router-active>
<a [routerLink]=" ['Items'] ">Items</a>
</li>
</ul>
</nav>
</md-toolbar>
</header>
<md-progress-bar mode="indeterminate" color="primary" *ngIf="loading"></md-progress-bar>
<main>
<router-outlet></router-outlet>
</main>
})
@RouteConfig([
{ path: '/', name: 'Index', component: Home, useAsDefault: true },
{ path: '/home', name: 'Home', component: Home },
{ path: '/item', name: 'Items', component: ItemComponent },
// Async load a component using Webpack's require with es6-promise-loader and webpack `require`
{ path: '/about', name: 'About', loader: () => require('es6-promise!./about')('About') }
])
export class App {
dataItem: IDataItem[];
// @Input() flag
constructor(
public appState: AppState,
private _itemData: JSTreeService,
private _sharedData: SharedData) {
}
getData() {
this._itemData.getData()
.subscribe(
// the first argument is a function which runs on success
(data: IDataItem[]) => {
this.dataItem = data;
},
// the second argument is a function which runs on error
err => console.error(err),
// the third argument is a function which runs on completion
() => (this._sharedData.dataItem = this.dataItem)
);
this.flag = 1;
}
ngOnInit() {
console.log('Initial App State', this.appState.state);
console.log('hello `Item` component');
this.getData();
}
}
这是我的路线组件
@Component({
selector: 'Item',
template: require('./item.html'),
providers: [
]
})
export class ItemComponent {
dataItem: IDataItem[];
flag: number;
constructor(private _sharedData: SharedData) {
}
ngOnInit() {
// console.log(this.dataItem);
this.dataItem = this._sharedData.dataItem;
}
ngOnDestroy() {
// this.dataItem = this._sharedData.dataItem;
}
}
这是共享服务
@Injectable()
export class SharedData {
constructor() {
}
dataItem:IDataItem[];
}
这是我的item.template
<div class="">
<label *ngFor="let item of dataItem"> <input type="checkbox" name="checkbox" value="value"> {{item.text}} <br></label>
</div>
我可以成功地将数据从 appcomponent 传递到 'ItemComponent'。因此,每当我加载我的应用程序时,它都会订阅http调用并将数据传递给SharedService。当我单击 Item 时,它会路由到 ItemComponent,它会显示数据。现在我的问题是每次我路由到 Item 时,每次它都会重新创建 ItemComponent,这样我的数据就会消失。我不想要它。我想存储该组件的状态。这是在组件之间传递数据的好方法吗?我是Angular2的新手,任何类型的帮助都会受到赞赏:)我的更新项目组件 :
@Component({
selector: 'Item',
template: require('./item.html'),
providers: [
// JSTreeService,
]
})
export class ItemComponent implements CanReuse, OnReuse {
dataItem: IDataItem[];
flag: number;
constructor(private _sharedData: SharedData) {
// this.dataItem = params.get('dataitems');
}
ngOnInit() {
// console.log(this.dataItem);
this.dataItem = this._sharedData.dataItem;
}
routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) {
return true;
}
routerOnReuse(next: ComponentInstruction, prev: ComponentInstruction) {
// this.name = next.params['name'];
this.dataItem = this._sharedData.dataItem;
console.log(this.dataItem);
}
ngOnDestroy() {
// this.dataItem = this._sharedData.dataItem;
}
}
是的,我正在使用从webpackstarter工具包中剥离的@angular/路由器
将数据保留在服务中,并在重新创建组件时(使用此组件路由回路由时)从那里获取数据
routerCanReuse(nextInstruction: ComponentInstruction, prevInstruction: ComponentInstruction) : boolean |
<boolean> {
return true;
}
这在新的< code>RC.1路由器中尚未实现。
我一直在使用这个留档(我在网上唯一能找到的)来构建一个组件:http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5/Introduction 我可以在一定程度上理解它,但它确实缺乏任何定义。我创建的组件在一定程度上工作正常,尽管我有一些更严重的问题。 基本上,我需要组件做的只是加载一个设置区域来设置一些值,并通
我有一个对象,如下所示: 我想过滤并创建一个满足任何条件的新数组。例如:过滤器的名称为“AD”,并创建一个新的密钥数组,如下所示: 尝试地图 尝试过了。过滤器: 提前谢谢
Hyperf 官方提供了工具来快速创建组件包。 # 创建适配 Hyperf 最新版本的组件包 composer create-project hyperf/component-creater your_component dev-master # 创建适配 Hyperf 1.1 版本的组件包 composer create-project hyperf/component-creater you
我有一个现有的数组,如下所示 然后我想创建一个新的数组,如下所示 我已经通过方法尝试过了 但是它没有给出一个正确的数组,请帮助我解决这个问题
从 /core 引入 Component 装饰器 在 中 ,设置selector、template 和 styles 等元数据 template (模板):HTML的一种形式,它告诉Angular如何呈现这个组件。下面的组件会将name变量的值插入到双括号之间的模板中,在视图中呈现的是。 要使用这个组件,我们只需添加到我们的HTML,Angular将插入这些标签之间的视图的实例。 查看示例
寻找一种方法,使服务在必要时将最新数据提供给订阅的组件。例如:组件 3 将更改写入 API 以下是一些片段和一些描述,说明到目前为止我所做的工作: 该服务通过HTTP从API获取数据。组件1和组件2订阅了服务返回的observable: