@realjumy wrote:
I'm having some difficulties with Ionic 2 and setting up global variables. The structure of my app is as follows:
Main app | |--- Page1 (Info) |--- Page2 (Map) |--- Page3 (List) | |--- ItemTabsPage | |---tab1 |---tab2 |---tab3
My intention is to show a list in Page3, and once one item is selected, to show additional information in tabs.
I send the information from Page 3 to the page with the tabs using:
itemTapped(event, item) { this.nav.push(ItemTabsPage, { item: item }); }
The problem is that I can't do the same to send the info to the child tabs. I would like to show different information depending on which item is selected. I have tried defining an injectable globalVars.js to store the value in a variable:
import {Injectable} from 'angular2/core'; @Injectable() export class GlobalVars { constructor(myGlobalVar) { this.myGlobalVar = ""; } setMyGlobalVar(value) { this.myGlobalVar = value; } getMyGlobalVar() { return this.myGlobalVar; } }
and then updating the code of itemTapped in the list as follows:
itemTapped(event, item) { this.nav.push(ItemTabsPage, { item: item }); this.globalVars.setMyGlobalVar(item); }
However, I always get the same error:
Uncaught EXCEPTION: Error during evaluation of "click" ORIGINAL EXCEPTION: TypeError: Cannot read property 'setMyGlobalVar' of undefined
The code for page3 is:
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); } }
Anyone have any suggestion? My Ionic installation is:
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
I tried adding [GlobalVars] to the return in river-list.js but if I do that, the app gets blank and it doesn't start...
Posts: 1
Participants: 1