Jum*_*ssë 1 javascript variables tabs injectable ionic2
我在使用Ionic 2和设置全局变量方面遇到了一些困难.我的应用程序的结构如下:
Main app
|
|--- Page1 (Info)
|--- Page2 (Map)
|--- Page3 (List)
|
|--- ItemTabsPage
|
|---tab1
|---tab2
|---tab3
Run Code Online (Sandbox Code Playgroud)
我的目的是在Page3中显示一个列表,并在选择一个项目后,在选项卡中显示其他信息.
我使用以下标签将信息从第3页发送到页面:
itemTapped(event, item) {
this.nav.push(ItemTabsPage, {
item: item
});
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法将信息发送到子选项卡.我想根据选择的项目显示不同的信息.我已经尝试定义一个可注入的globalVars.js来将值存储在一个变量中:
import {Injectable} from 'angular2/core';
@Injectable()
export class GlobalVars {
constructor(myGlobalVar) {
this.myGlobalVar = "";
}
setMyGlobalVar(value) {
this.myGlobalVar = value;
}
getMyGlobalVar() {
return this.myGlobalVar;
}
}
Run Code Online (Sandbox Code Playgroud)
然后更新列表中itemTapped的代码,如下所示:
itemTapped(event, item) {
this.nav.push(ItemTabsPage, {
item: item
});
this.globalVars.setMyGlobalVar(item);
}
Run Code Online (Sandbox Code Playgroud)
但是,我总是得到同样的错误:
Uncaught EXCEPTION: Error during evaluation of "click"
ORIGINAL EXCEPTION: TypeError: Cannot read property 'setMyGlobalVar' of undefined
Run Code Online (Sandbox Code Playgroud)
page3的代码是:
import {Page, NavController, NavParams} from 'ionic-angular';
import {ItemService} from '../services/ItemService';
import {ItemTabsPage} from '../item/item-tabs/item-tabs';
import {GlobalVars, setMyGlobalVar} from '../../providers/globalVars';
import {Http} from 'angular2/http';
import 'rxjs/add/operator/map';
@Page({
templateUrl: 'build/pages/item-list/item-list.html',
providers: [ItemService]
})
export class ItemListPage {
static get parameters() {
return [[NavController], [NavParams], [Http]];
}
constructor(nav, navParams, http, globalVars) {
this.nav = nav;
// If we navigated to this page, we will have an item available as a nav param
this.selectedItem = navParams.get('item');
this.http = http;
//this.items = null;
this.globalVars = globalVars;
this.http.get('https://website-serving-the-info.com/items.json').map(res => res.json()).subscribe(data => {
this.items = data.items;
},
err => {
console.log("Oops!");
});
}
itemTapped(event, item) {
this.nav.push(ItemTabsPage, {
item: item
});
this.globalVars.setMyGlobalVar(item);
}
}
Run Code Online (Sandbox Code Playgroud)
有人有什么建议吗?我的Ionic安装是:
Cordova CLI: 6.1.1
Gulp version: CLI version 3.9.1
Gulp local: Local version 3.9.1
Ionic Framework Version: 2.0.0-beta.4
Ionic CLI Version: 2.0.0-beta.25
Ionic App Lib Version: 2.0.0-beta.15
OS: Distributor ID: LinuxMint Description: Linux Mint 17.3 Rosa
Node Version: v5.11.0
Run Code Online (Sandbox Code Playgroud)
我使用的最简单方法是创建文件app/global.ts
export var global = {
myvar : 'myvar 01',
myfunction : function(msg) {
alert(msg);
}
};
Run Code Online (Sandbox Code Playgroud)
然后在其他类中自由导入和使用:
import {global} from "../../global";
constructor() {
global.myfunction('test');
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用此全局组件HTML页面,如下所示
export class HomePage {
Global: any = Global;
Run Code Online (Sandbox Code Playgroud)
现在它可以在HTML中使用,如下所示
<div [style.display]="Global.splash ? 'flex': 'none'" >
Run Code Online (Sandbox Code Playgroud)
你走在正确的轨道上.其他一些答案也可行,但Ionic团队建议您不要通过全局文件使用全局变量.相反,他们建议使用Providers(正如你试图做的那样).
您的提供者缺少实际的变量声明.
@Injectable()
export class GlobalVars {
myGlobalVar: string = '' // this is the line you're missing
constructor(myGlobalVar) {
this.myGlobalVar = "";
}
}
Run Code Online (Sandbox Code Playgroud)
您还应注意,您没有导出该功能setMyGlobalVar().您正在导出GlobalVars包含该函数的类setMyGlobalVar().
我相信如果你做出这些改变,它应该有效.
编辑我也要小心this.globalVars = globalVars;你的这一行Page3.这将导致globalVars每次Page3创建时重写.
| 归档时间: |
|
| 查看次数: |
11703 次 |
| 最近记录: |