Ionic-framework: Ionic2 - nav.setRoot(Component) - ์ฒ˜์Œ์—๋งŒ ์ž‘๋™, ์ดํ›„ ํƒ์ƒ‰ ๋ถˆ๊ฐ€, ๋ณด๊ณ ๋œ ์˜ค๋ฅ˜ ์—†์Œ

์— ๋งŒ๋“  2016๋…„ 03์›” 18์ผ  ยท  100์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ionic-team/ionic-framework

๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…:

Ionic2๋กœ ์•ฑ์„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” App.ts๋ฅผ ๋ถ€๋ชจ๋กœ, Welcome.ts๋ฅผ ์ž์‹ ํŽ˜์ด์ง€๋กœ, Featured.ts๋ฅผ ์ž์‹ ํŽ˜์ด์ง€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Firebase๊ฐ€ ์•ฑ๊ณผ ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Rootpage๋Š” ๋จผ์ € Welcome์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

this.rootPage = Welcome;

1๋‹จ๊ณ„: Welcome to authenicate with Google์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ onAuth๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด this.nav.setRoot(Featured); ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ชจ๋‘ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ์ถ”์ฒœ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ณ  ์•„๋ฌด ๋ฌธ์ œ ์—†์ด ๋ชจ๋“  ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: Featured๋Š” App.ts/html์—์„œ ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—๋Š” unauth๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋กœ๊ทธ์•„์›ƒ ๋ฒ„ํŠผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Unauth๋Š” Firebase unauth๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

this.menu.close();    
let nav = this.app.getComponent('nav');    
nav.setRoot(Welcome); 

3๋‹จ๊ณ„: 1๋‹จ๊ณ„์™€ ๋™์ผํ•˜๊ฒŒ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋ฅผ ์—ด๊ณ  ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด์—์„œ ํŽ˜์ด์ง€๋ฅผ ์„ ํƒํ•˜๋ฉด ํƒ์ƒ‰์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋Š” ๋‹ซํžˆ์ง€๋งŒ ํŽ˜์ด์ง€๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ณ  ํƒ์ƒ‰ ๋ชจ์Œ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ์ด ์‚ฌ๋ผ์ง€๊ณ  ํƒ์ƒ‰์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์˜คํ”ˆํŽ˜์ด์ง€ ์ฝ”๋“œ:

  openPage(page) {
    //1. Loop through and set active attribute to False if it doesn't match.
    //   Set to True if it matches page title
    for(var i = 0; i < this.NavPages.length; i++) {
      if(this.NavPages[i].title == page.title) this.NavPages[i].active = true;
      else this.NavPages[i].active = false;
    }
    for(var i = 0; i < this.ActivityPages.length; i++) {
      if(this.ActivityPages[i].title == page.title) this.ActivityPages[i].active = true;
      else this.ActivityPages[i].active = false;
    }
    for(var i = 0; i < this.PreferencesPages.length; i++) {
      if(this.PreferencesPages[i].title == page.title) this.PreferencesPages[i].active = true;
      else this.PreferencesPages[i].active = false;
    }

    //2. close the menu when clicking a link from the menu
    this.menu.close();
    //3. navigate to the new page if it is not the current page
    let nav = this.app.getComponent('nav');
    nav.setRoot(page.component);
  }

์–ด๋–ค ํ–‰๋™์„ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

1๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ํƒ์ƒ‰์ด ๊ณ„์† ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„:
์žฌํ˜„ ๋‹จ๊ณ„๋Š” ์œ„์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Code included above.

๊ธฐํƒ€ ์ •๋ณด: (์˜ˆ: ์Šคํƒ ์ถ”์ , ๊ด€๋ จ ๋ฌธ์ œ, ์ˆ˜์ • ๋ฐฉ๋ฒ• ์ œ์•ˆ, ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ๋งํฌ, ํฌ๋Ÿผ ๋งํฌ ๋“ฑ)
๋ถˆํ–‰ํžˆ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ˜์†” ๋กœ๊ทธ์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ด์˜จ ๋ฒ„์ „? 2.x

ํ„ฐ๋ฏธ๋„/cmd ํ”„๋กฌํ”„ํŠธ์—์„œ ionic info ์‹คํ–‰: (์•„๋ž˜์— ์ถœ๋ ฅ ๋ถ™์—ฌ๋„ฃ๊ธฐ)

Your system information:

Cordova CLI: 6.0.0
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.1
Ionic Version: 2.0.0-beta.3
Ionic CLI Version: 2.0.0-beta.19
Ionic App Lib Version: 2.0.0-beta.9
ios-deploy version: 1.8.2 
ios-sim version: 5.0.3 
OS: Mac OS X El Capitan
Node Version: v0.12.7
Xcode version: Xcode 7.2.1 Build version 7C1002 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด๋น„๊ฒŒ์ด์…˜์€ ์ •๋ง ๊ณ ์žฅ๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–‘์‹์ด ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ํ‘ธ์‹œํ•ด๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  100 ๋Œ“๊ธ€

๋‚˜๋Š” ๋‹ค์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค: 2๊ฐœ์˜ ์ด์˜จ ํŽ˜์ด์ง€๊ฐ€ ๋”์— ํ•œ ๋ฒˆ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
screen shot 2016-03-18 at 3 34 03 pm

๋‚ด๊ฐ€ ํƒ์ƒ‰ํ•œ ํŽ˜์ด์ง€๋Š” "์ถ”์ฒœ" ํŽ˜์ด์ง€๋ณด๋‹ค z-index(92)๊ฐ€ ๋‚ฎ์€ "ํƒ์ƒ‰"์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” ํƒ์ƒ‰ ์ค‘์ด์–ด์•ผ ํ•˜์ง€๋งŒ "์ถ”์ฒœ"์€ 93์˜ z-์ƒ‰์ธ์œผ๋กœ "ํƒ์ƒ‰" ์œ„์— ์˜ค๋ฒ„๋ ˆ์ด๋ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ œ ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ทธ์ธ ํ›„์—๋„ ๋ฆฌ๋””๋ ‰์…˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ๊ณ  ๋กœ๊ทธ์ธ ๋ณด๊ธฐ์— nav.setRoot(TabsPage) ๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ nav.setRoot(TabsPage) ์„ ์–ป์€ ํ›„ facebook์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ nav.push(TabsPage) ๋„ ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š”๋ฐ Main์ด ๋‚ด ํƒญ ์ค‘ ํ•˜๋‚˜์ธ nav.push(Main) ๋ฅผ ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€๋งŒ ํƒญ๋ฐ”๊ฐ€ ์—†๊ณ  ๋’ค๋กœ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ nav.setRoot(Main) ํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ ํƒญ ํ‘œ์‹œ์ค„์ด ์—†๊ณ  ๋’ค๋กœ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ํƒญ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ setRoot ๊ฐ€ ์•ฝ์†์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ–ˆ์Šต๋‹ˆ๋‹ค.

this.nav.setRoot(TabsPage)
  .then(data => {
      console.log(data);
  }, (error) => {
      console.log(error);
  })

์ด๊ฒƒ์€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— ์ฐฉ๋ฅ™ํ–ˆ์„ ๋•Œ true ๋ฅผ ๋˜์กŒ๊ณ  ์ด๋ฏธ ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ์ง€๋งŒ facebook์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ๋˜์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ฝ์†์ด ๊ฒฐ์ฝ” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์—…๋ฐ์ดํŠธ์ž…๋‹ˆ๋‹ค. setRoot์—์„œ ํ˜ธ์ถœ๋˜๋Š” setPages ํ•จ์ˆ˜์˜ components/nav/nav-controller.js์— Ionic2์˜ ํ•ต์‹ฌ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์ „ํ™˜์˜ ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
setRoot -> setPages -> _transition -> _render -> _postRender๋ผ๋Š” ํ•จ์ˆ˜์˜ ํ๋ฆ„์„ ๋”ฐ๋ฅธ๋‹ค๋ฉด

_render ํ•จ์ˆ˜์—์„œ:

this.loadPage(enteringView, null, opts, function () {
    if (enteringView.onReady) {
        // this entering view needs to wait for it to be ready
        // this is used by Tabs to wait for the first page of
        // the first selected tab to be loaded
        enteringView.onReady(function () {
            enteringView.loaded();
            _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
        });
    }
    else {
        enteringView.loaded();
        _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
    }
});

๋‚ด ์ฝ”๋“œ๊ฐ€ enteringView.onReady ์— ์ž…๋ ฅ๋˜๊ณ  ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

enteringView.onReady ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์ „์— _postRender ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‚ด ์•ฑ์€ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๋”๋Ÿฝ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” ํƒญ์˜ ํŽ˜์ด์ง€๊ฐ€ ์ค€๋น„๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ฒฐ์ฝ” ์ค€๋น„๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฒฐ์ฝ” ์ข‹์€ ์ค€๋น„ ์ƒํƒœ๋ฅผ ์–ป์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ์— ์ด๋Ÿฐ ๊ฒƒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฒ„๊ทธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

Google ๋˜๋Š” Facebook ์ธ์ฆ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@privetr ์ด๊ฒƒ์€ beta4๋กœ ์ˆ˜์ •๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚ด ๊ฒƒ์€ ์ง€๊ธˆ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@jorchg ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด :)

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”! ์ด ๋ฌธ์ œ๊ฐ€ beta.4์—์„œ ์ˆ˜์ •๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์˜ˆ์ •์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”!

์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Facebook ๋กœ๊ทธ์ธ ์•ฝ์† ํ›„์— ๋‚ด TabsPage์— nav๋ฅผ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ๋ฃจํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Cordova CLI: 6.1.1
Gulp version:  CLI version 1.2.1
Gulp local:   Local version 3.9.1
Ionic Framework Version: 2.0.0-beta.4
Ionic CLI Version: 2.0.0-beta.24
Ionic App Lib Version: 2.0.0-beta.14
ios-deploy version: 1.8.5
ios-sim version: 5.0.8
OS: Mac OS X El Capitan
Node Version: v5.9.1
Xcode version: Xcode 7.3 Build version 7D175

๋˜ํ•œ nav.setRoot(x)๋ฅผ ํ˜ธ์ถœํ•ด๋„ ์ƒˆ ํŽ˜์ด์ง€๊ฐ€ ์‹ค์ œ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ž…๋ ฅ ํ•„๋“œ์— ํฌ์ปค์Šค๋ฅผ ๋งž์ถ”๋ฉด ์‚ฌ๋ผ์ง€๊ณ  ์˜ฌ๋ฐ”๋ฅธ ํŽ˜์ด์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ setRoot ๋Œ€์‹  ์Šคํƒ์— ํ‘ธ์‹œํ•˜๋ฉด ์ž…๋ ฅ ํ•„๋“œ์— ์ดˆ์ ์„ ๋งž์ถœ ๋•Œ๊นŒ์ง€ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ.

ํŽธ์ง‘: ๋‚ด ์•ฑ์˜ ํƒ์ƒ‰์„ ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋กœ ๋ฐ”๊พธ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํƒญ์€ ์ฐธ๊ณ ๋กœ ๋ฒ ํƒ€ 4๋ถ€ํ„ฐ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@daveshirman ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ํƒญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ํƒญ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚ด ๋ฌธ์ œ๋Š” ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๋‘˜ ๋‹ค navcontroller๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์™œ ์ €์—๊ฒŒ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ๋Š” ํšจ๊ณผ๊ฐ€ ์—†๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฐ์ปค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด๋ฉด ionic ํŒ€์ด ๋„์šธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. nav.setRoot(MyComponent) ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. --live-reload ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Android์—์„œ ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ์ผ๋ถ€ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

0     195445   log      deviceready has not fired after 5 seconds.
1     195457   log      Channel not fired: onDOMContentLoaded

๋˜ํ•œ ์žฅ์น˜๊ฐ€ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋  ๋•Œ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋งˆ์นจ๋‚ด Android์—์„œ ๋‚ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ผ์ด๋ธŒ ๋‹ค์‹œ ๋กœ๋“œ ์—†์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ผ์ด๋ธŒ ์žฌ์žฅ์ „ ๋ชจ๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ข…์†์„ฑ์œผ๋กœ Beta4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  CLI ๋ฒ„์ „ 2.0.0-beta25.

๋‚ด๊ฐ€ ์„ค๋ช…ํ•œ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™„์ „ํžˆ ์žŠ์–ด ๋ฒ„๋ ธ๊ณ  ์ด์˜จ ์—…๋ฐ์ดํŠธ ํ›„์— ์ž‘๋™์ด ์ค‘์ง€๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ์Šค๋ ˆ๋“œ์˜ ์ตœ์‹  ๊ฒŒ์‹œ๋ฌผ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋‹ค์‹œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„. ๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ์ €๋Š” ํ˜„์žฌ Ionic [email protected] ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค!

๋‚ด ๋ฌธ์ œ์˜ ์›์ธ์€ setRoot๋งŒ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ .pop()์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด app.ts์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์‹คํŒจํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ฃจํŠธ ํŽ˜์ด์ง€์— ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ(์˜ˆ: 3ํŽ˜์ด์ง€ ๊นŠ์ด) setRoot ๋ฉ”์„œ๋“œ ๋’ค์— nav.popToRoot()๋„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

this.nav.setRoot(xxxx).then(() =>{
    this.nav.popToRoot();
    //....
});

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด๋น„๊ฒŒ์ด์…˜์€ ์ •๋ง ๊ณ ์žฅ๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–‘์‹์ด ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ํ‘ธ์‹œํ•ด๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋‹ฌ ์ฐฝ์ด ํ‘œ์‹œ๋  ๋•Œ๋„ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
2016๋…„ 7์›” 13์ผ ์˜ค์ „ 3์‹œ 59๋ถ„์— "scorpnode" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด๋น„๊ฒŒ์ด์…˜์€ ์ •๋ง ๊ณ ์žฅ๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ฐ€๋ฉด
์–‘์‹์ด ์žˆ์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/driftyco/ionic/issues/5883#issuecomment -232241198,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0
.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๊ฒƒ์€ 2.0.0-beta.10์—์„œ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. NavController.setRoot๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ๋นˆ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. iOS ๊ธฐ๊ธฐ์—์„œ๋งŒ ๋ฐœ์ƒ

๊ธฐ๊ธฐ ์ •๋ณด:

  • ๋ชจ๋ธ: iPad5,4
  • iOS ๋ฒ„์ „: 8.3

2.0.0-beta.10 ์—์„œ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. NavController.setRoot๋กœ ๋‹ค์Œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

this.nav.setRoot(somepage).then(() =>{
     this.nav.popToRoot();
});

๊ธฐ๊ธฐ ์ •๋ณด:

  • ๋ชจ๋ธ: ๋ชจํ† ๋ž„๋ผ x ํ”Œ๋ ˆ์ด
  • ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „: 6

CLI v2.0.0-๋ฒ ํƒ€.32.

์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
this.nav.setRoot(ListPage)
์‹œ์ž‘ ํŠœํ† ๋ฆฌ์–ผ ์•ฑ์˜ hello-ionic.ts์—์„œ.

v2๋กœ ์‰ฝ๊ฒŒ ๋งŒ๋“  FB ๋กœ๊ทธ์ธ์„ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€?

[ํŽธ์ง‘ํ•˜๋‹ค]
๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค
import {Nav} from 'ionic-angular';
๋Œ€์‹ ์—
import {NavController} from 'ionic-angular ';

๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!
ํ˜„์žฌ๋กœ์„œ๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ”Œ๋Ÿฐ์ปค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Ionic์„ ์‚ฌ์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”! ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ™œ๋™์ด ์žˆ์—ˆ๋˜์ง€ ๊ฝค ์˜ค๋ž˜ ๋œ ๊ฒƒ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์–ธ์ œ๋“ ์ง€ ์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค. Ionic์„ ์‚ฌ์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต์žฅ์„ ๋“œ๋ฆฌ์ง€ ๋ชปํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ๐Ÿ’ƒ

๋‚ด ๋ฌธ์ œ๋Š” cordova-plugin-facebook4 https://github.com/jeduan/cordova-plugin-facebook4 ์™€ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ beta.10์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ionic-native์—์„œ Facebook ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. ๋ž˜ํผ๊ฐ€ ๋™์ผํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š” @jgw96 ์ž…๋‹ˆ๋‹ค! ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฒ ํƒ€ 10์—์„œ ์ €์—๊ฒŒ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ plnkr์—์„œ ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์œผ๋กœ, ๋‚˜๋Š” ๋ฃจํŠธ๋ฅผ "ํƒญ" ํŽ˜์ด์ง€๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด ์„ค์ •ํ•˜๋Š” ๋กœ๊ทธ์ธ ๋ชจ๋‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "ํƒญ"์˜ ํŽ˜์ด์ง€์—๋Š” app.ts์—์„œ ์†Œ๋น„๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” "๋กœ๊ทธ์•„์›ƒ" ๋ฒ„ํŠผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. app.ts์—์„œ ๋ฃจํŠธ๋ฅผ "LoginPage"๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. "logout"์„ ํด๋ฆญํ•˜๋Š” ๋™์•ˆ DOM์„ ๋ณด๋ฉด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ํƒญ ์•„๋ž˜์— ์žˆ์ง€๋งŒ ํƒ์ƒ‰์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

์‹œ๊ฐ„ ๋‚ด ์ค˜์„œ ๊ณ ๋งˆ์›Œ!

์ด #7593์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. 2.0.0-beta.10 ๋ฐ 11์— ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋‹ค๋ฅธ ์ œํ’ˆ์—๋„ ์ ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฒ ํƒ€ 11์—์„œ๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํƒ์ƒ‰์€ this.nav.setRoot(xxx)๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๊นŒ์ง€ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ํƒ์ƒ‰์€ ๋ฌด์ž‘์œ„๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค... ์ƒˆ ํŽ˜์ด์ง€๋ฅผ ํ‘ธ์‹œํ•  ๋•Œ ๋•Œ๋•Œ๋กœ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด๊ธฐ๋Š” ์ƒˆ ํŽ˜์ด์ง€ ๋Œ€์‹  ํ˜„์žฌ ํŽ˜์ด์ง€์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํŒ์—…ํ•  ๋•Œ ํƒ์ƒ‰์ด ๋‘ ๋ฒˆ ํŒ์—…๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
NavController ๊ฐœ์ฒด์—์„œ ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DOM์— ํ˜ผ๋™์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ion-page ํƒœ๊ทธ์˜ z-index ์†์„ฑ ๊ฐ’์ด ์ž˜๋ชป๋˜์–ด ์ž˜๋ชป๋œ ํŽ˜์ด์ง€๊ฐ€ ์œ„์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ด์ค‘ ํŽ˜์ด์ง€ ํŒ์—… ๋ฐ DOM ํ˜ผ๋™๊ณผ ๊ด€๋ จํ•˜์—ฌ @Troknus ์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋™์ž‘์„ ๋ด…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฒ˜์Œ์—๋Š” setRoot๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ ํƒ์ƒ‰ ์‹œ์—๋Š” ๋งˆ์น˜ ์ด์ „์— ์™„์ „ํžˆ ์–ธ๋กœ๋“œ๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ์ดˆ๊ธฐ ๋ฃจํŠธ ํŽ˜์ด์ง€๊ฐ€ ๊นœ๋ฐ•์ž…๋‹ˆ๋‹ค.

@Troknus ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. show-page ํด๋ž˜์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ์ดํŠธ์—์„œ ๊ฒ€์ƒ‰ํ•˜์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ•˜์ง€๋งŒ ๋ชจ๋‘ ์‹คํŒจ์ž…๋‹ˆ๋‹ค.

๋ฒ ํƒ€ 10์—์„œ. ํƒ์ƒ‰์ด ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ฒ ํƒ€ 11์—์„œ๋Š” ์™œ ์•ˆ๋˜๋‚˜์š”?

@Troknus ๋„ ๊ฐ™์€ ๋™์ž‘์„ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–˜๋“ค ์•„, @jorchg ๊ฐ€ ๋งํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .. ํƒญ ์˜ค๋ฅ˜๋ฅผ ๊ณ ๋ คํ•˜๋ฉด .. ๋‘ ๋ฒˆ์งธ ํ˜ธ์ถœ ํ›„ ํƒญ์œผ๋กœ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค (ํ‘ธ์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ˜„์žฌ ํŽ˜์ด์ง€๋Š” ์—ฌ์ „ํžˆ ๋งจ ์œ„์— ์žˆ์Œ)

๋กœ๊ทธ์ธ ํ›„ ํƒญ ๋ณด๊ธฐ๋กœ ํ‘ธ์‹œํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ .. ํƒญ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ํŽ˜์ด์ง€๋กœ ํ‘ธ์‹œํ•˜๋ฉด .. ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@Troknus ์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@schaergeek ์€ ๋ฒ ํƒ€ 11๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋ฉฐ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์˜ˆ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/mariohmol/ionic2-meteor-messenger-password

๋‚˜๋Š” Troknus์— ๋Œ€ํ•ด ์—„์ง€์†๊ฐ€๋ฝ์„ ์น˜์ผœ ์˜ฌ๋ ธ์ง€๋งŒ ๊ฒŒ์‹œ๋ฌผ์ด ๋” ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํƒ์ƒ‰์€ ์‹ค์ œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ(๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค)๋Š” ์ด ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
(์šฐ๋ฆฌ๋Š” ๋ฒ ํƒ€ 11์—์„œ Troknus๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋™์ผํ•œ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...).

@joshgarwood์˜ plnkr ์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ํผ๋ธ”๋ฆฌ์‹ฑ์ด ๋ฌธ์ œ์ธ๋“ฏ? MyApp์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ธ์ฆ ์ด๋ฒคํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๋Œ€์‹  TabPage ๋‚ด์˜ NavController ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ๋ฃจํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. MyApp์˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ†ตํ•ด ๋ฃจํŠธ๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์„ค์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฃผ์ž…๋˜๋Š” ๋‹ค๋ฅธ NavController ์ธ์Šคํ„ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค...? DI๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์†Œ๋น„์ž๋Š” NavController์˜ ์–ด๋–ค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฃผ์ž…๋˜๋Š”์ง€ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. setRoot(*)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Troknus ๊ฐ€ ๋งํ•˜๋Š” Z-index ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๋Š” #8042 ๋ฌธ์ œ์— ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ setRoot(*)๋Š” ์ „ํ˜€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์€ @jgw96 ๋‹˜ ์˜ ๋Œ“๊ธ€ ์„ ๋ฐฉ๊ธˆ ์ฝ์—ˆ๋Š”๋ฐ ๋žœ๋ค NavController ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ์š”...?

๊ทธ๋ž˜๋„ Z-์ธ๋ฑ์Šค์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ beta11๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ...

DOM์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฑฐ๋‚˜ ํŽ˜์ด์ง€๊ฐ€ ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ plnkr์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? @joshgarwood์˜ plnkr ์—๋Š” ํ‘ธ์‹œ๋‚˜ ํŒ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@rcjsuen Beta10 ๋ฐ Beta11์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. setRoot๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ ์•ˆํ•จ

  private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.nav.setRoot(TabsPage);
        } else {
          this.nav.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }
}

์ผํ•˜๊ณ ์žˆ๋Š”

 private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.setRoot(TabsPage);
        } else {
          this.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }

  private setRoot(newRootPage: any){
    this.rootPage = newRootPage;
  }
}

@Vanclief ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ์ œ์•ˆํ•œ์ด ์†”๋ฃจ์…˜์กฐ์ฐจ๋„ ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์ฝ”๋“œ๋Š” ์ฒ˜์Œ์—๋Š” ๊ท€ํ•˜์˜ ์ฝ”๋“œ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ionic 2 rc0 ๋ฐ angular 2.0.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ firebase(๋˜๋Š” angularfire)์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ๋‹ค์Œ์œผ๋กœ ๋กค๋ฐฑํ–ˆ์Šต๋‹ˆ๋‹ค.

{
    "@angular/common": "2.0.0-rc.4",
    "@angular/compiler": "2.0.0-rc.4",
    "@angular/core": "2.0.0-rc.4",
    "@angular/forms": "^0.2.0",
    "@angular/http": "2.0.0-rc.4",
    "@angular/platform-browser": "2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "2.0.0-rc.4",
    "@angular/router": "^2.0.0-rc.2",
    "firebase": "^3.3.0",
    "ionic-angular": "2.0.0-beta.11",
    "ionic-native": "1.2.2"
}

์‚ญ์ œ๋œ node_modules/๊ฐ€ npm์„ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ์ด์ œ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒํ•œ ์ ์€ this.rootPage๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์•ฑ์ด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ

        this.setRoot(TeamPage);

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

์‚ฌ์šฉ์ž๋ฅผ TeamPage๋กœ ํƒ์ƒ‰ํ•œ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋ฅผ LoginPage๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ).

ํ•˜์ง€๋งŒ

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

์‚ฌ์šฉ์ž๋ฅผ ์–ด๋””์—๋„ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ํ”ผํ„ฐํŒŒ์ดํผ

๋‚˜๋Š” ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ RC0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๋‚˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ Firebase๋„ ์‚ฌ์šฉํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” AngularFire๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค: https://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

ํŽธ์ง‘: ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ๋งŒ๋“  ๋น ๋ฅธ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@๋ฐดํด๋ฆฌํ”„

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ๊ณ  ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ionic serve ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ํŒŒ์ผ์„ ๋ณผ ๋•Œ ์ถฉ๋Œํ•˜๋Š” ionic RC_0๊ณผ ๊ฒฐํ•ฉ๋œ ๋…ธ๋“œ ๋ชจ๋“ˆ์—์„œ ํ•ดํ‚น์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์ด์ „ ๋ฒ„์ „์„ ๊ณ ์ˆ˜ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  firbase.auth.currentUser๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ rootPage๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ด์ „์— ์„ค์ •ํ•˜์ง€ ์•Š์€ ์ด์ƒ ์ฝœ๋ฐฑ์—์„œ ๋ฃจํŠธ ํŽ˜์ด์ง€ ์„ค์ •์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

        const page = firebase.auth().currentUser ? TeamPage : LoginPage;
        this.setRoot(page);

        firebase.auth().onAuthStateChanged(user => {
            // If there's a user take him to the Teams page otherwise send him to LoginPage
            const page = user ? TeamPage : LoginPage;
            this.setRoot(page);
        });

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋™์ผํ•œ ํŽ˜์ด์ง€๋ฅผ ๋‘ ๋ฒˆ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋„๋ก setRoot ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋˜ํ•œ ํ•ดํ‚น์ด๋ฉฐ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋‹ค์Œ ์ฃผ์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‹ฌ์ธต ์กฐ์‚ฌ์— ๋“ค์–ด๊ฐˆ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. this.nav.push(...)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ this.nav.setRoot(...)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฒ˜์Œ ์ดํ›„์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์ด์˜จ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Your system information:

Cordova CLI: 6.3.1
Gulp version:  CLI version 3.9.1
Gulp local:  
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.1.0-beta.1
OS: Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS 
Node Version: v4.6.0

package.json์—์„œ

  "dependencies": {
    "@ionic/storage": "^1.0.3",
    "firebase": "^3.4.1",
    "ionic-angular": "^2.0.0-rc.0",
    "ionic-native": "^2.2.2",
    "ionicons": "^3.0.0"
  },

@jgw96 ์ด๊ฒŒ ์™œ ๋‹ซํ˜€์žˆ์ง€? ๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์€ setRoot๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ด๋ฆฐ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

@daveshirman , ๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์—ˆ๊ณ  ํƒ์ƒ‰ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ํ•ด๊ฒฐ ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด app.ts์—์„œ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ 

Firebase.initializeApp(๊ตฌ์„ฑ);

platform.ready().then(() => {
  firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      // If there's a user take him to the TabsPage page.
      this.rootPage = TabsPage;
    } else {
      // If there's no user logged in send him to the LoginPage
      this.rootPage = LoginPage;
    }
  });
  // Okay, so the platform is ready and our plugins are available.
  // Here you can do any higher level native things you might need.
  StatusBar.styleDefault();
});

์œ„์˜ if ๋ฌธ์€ // ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ SET THE ROOTPAGE TO TabsPage ํŽ˜์ด์ง€๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด LoginPage์— ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ Firebase ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ if ๋ถ€๋ถ„์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(์ฆ‰, rootPage๋กœ ์ด๋™ํ•˜์ง€๋งŒ Facebook์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” else ๋ถ€๋ถ„์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(์ฆ‰, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€

์ €๋Š” ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
ํŽ˜์ด์Šค๋ถ ๋กœ๊ทธ์ธ() {

//ํŽ˜์ด์Šค๋ถ์— ๋กœ๊ทธ์ธ
Facebook.login(['์ด๋ฉ”์ผ']).then((๊ฒฐ๊ณผ=>{
// ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ Firebase์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
์ž๊ฒฉ ์ฆ๋ช… = firebase.auth.FacebookAuthProvider '์ž๊ฒฉ ์ฆ๋ช…'
// firebase์— ๋กœ๊ทธ์ธํ•˜๋ฉด ํƒ์ƒ‰์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•„ app.ts์—์„œ //๋ช…๋ น๋ฌธ์˜ ELSE ๊ฒฝ๋กœ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜ firebase.auth().signInWithCredential(์ž๊ฒฉ ์ฆ๋ช…);
})).then((์‚ฌ์šฉ์ž)=>{
//alert(firebase.auth().currentUser.uid);
this.userProfileRef.child(firebase.auth().currentUser.uid).set({
id:firebase.auth().currentUser.uid,
์ด๋ฉ”์ผ: ์‚ฌ์šฉ์ž.์ด๋ฉ”์ผ,
๋””์Šคํ”Œ๋ ˆ์ด ์ด๋ฆ„: ์‚ฌ์šฉ์ž.๋””์Šคํ”Œ๋ ˆ์ด ์ด๋ฆ„,
profilePictureURL:user.photoURL
});

   this.navCtrl.setRoot(TabsPage);
}).catch((error)=>{
  alert(error);
})

}

์œ„์˜ ์ฝ”๋“œ์—์„œ ์ผ์–ด๋‚œ ์ผ์€
์ฒซ ๋ฒˆ์งธ๋กœ ๋‚ด๊ฐ€ ํ–ˆ๋˜ ํŽ˜์ด์Šค๋ถ์— ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Facebook.login(['์ด๋ฉ”์ผ']).then((๊ฒฐ๊ณผ=>

๋‘ ๋ฒˆ์งธ๋กœ Facebook ๋กœ๊ทธ์ธ ๊ฒฐ๊ณผ์—์„œ ๋ณด๋‚ธ accessToken์„ ์‚ฌ์šฉํ•˜์—ฌ Firebase์— ๋กœ๊ทธ์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
let ์ž๊ฒฉ ์ฆ๋ช… = firebase.auth.FacebookAuthProvider '์ž๊ฒฉ ์ฆ๋ช…' ;
์„ธ ๋ฒˆ์งธ๋กœ ์„ค์ •ํ•œ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ Firebase์— ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜ firebase.auth().signInWithCredential(์ž๊ฒฉ ์ฆ๋ช…);
์ฐธ๊ณ : ์ด๊ฒƒ์ด this.navCtrl.setRoot(TabsPage); ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ง Firebase์— ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ฝ”๋“œ์˜ then() ๊ฒฝ๋กœ์—์„œ rootPath๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  facebook appId์™€ appSecrete๊ฐ€ firebase>authentication>facebook ํŒจ๋„์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@OyebisiJemil ๋‹น์‹ ์ด ํ•œ ์ผ์— ๋Œ€ํ•œ ๊ธด ์„ค๋ช…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” setRoot๊ฐ€ facebook์ด๋‚˜ ๋‹ค๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ๊ฐœ๋…์ ์œผ๋กœ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์„ค๋ช…์œผ๋กœ ์—ด๋ ค ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์žˆ๋Š” ๊ฒƒ:

https://github.com/driftyco/ionic/issues/8453

๋‚˜๋Š” ๋˜ํ•œ ๋งค์šฐ ๋น„์Šทํ•œ ์ƒํ™ฉ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” setRoot(view) ๋Œ€์‹  push(view)๋กœ ์ „ํ™˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๊ณ  ์‹ค์ œ๋กœ ๋‚ด ์•ฑ ํ๋ฆ„๊ณผ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. nav.push(view)๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ nav.setRoot๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ตœ์‹  ๋นŒ๋“œ์—์„œ ์˜ค๋Š˜๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ์•„์›ƒ() {
this.authData.logoutUser().then(() => {
this.nav.setRoot(๋กœ๊ทธ์ธ ํŽ˜์ด์ง€);
});
}

์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„์™€์ฃผ์„ธ์š”. Thnx. ๋ฆฌ์Šค

setRoot ๋Œ€์‹  push ์‚ฌ์šฉ...

@jgw96 , @adamdbradley ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ค‘์š”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์—ด๊ณ  ์ด์ •ํ‘œ๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค. ์ €๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ์•ฑ์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

@dejancentelj ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค.

@lisaiceland ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์ œ์•ˆ์„ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค.
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15?u=niallr

@niallr12 @daveshirman ์ด๊ฒƒ์ด RC3์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

@manucorporat ์ด๊ฒƒ์ด RC3์˜ ๋ฌธ์ œ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ณ€๊ฒฝ ๋กœ๊ทธ์— ์ˆ˜์ • ์‚ฌํ•ญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ์ˆ˜์ • ์‚ฌํ•ญ์— ๋งŒ์กฑํ•˜๊ณ  ์–ด์จŒ๋“  ์ „๋ฐ˜์ ์œผ๋กœ ๋” ๋‚˜์€ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์›ํ•œ๋‹ค๋ฉด RC3์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@niallr12 ๊ธ€์Ž„, ๋‚˜๋Š”์ด ํŠน์ • ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ˆ˜๋งŽ์€ ์ž‘์€ ์ˆ˜์ •๊ณผ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด NavController๋ฅผ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐ ๋ช‡ ์ฃผ๋ฅผ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด: ๋ฏธ์นœ ํ๋ฆ„์œผ๋กœ ํƒ์ƒ‰ ์Šคํƒ์— ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ์ฃผ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ž…๋‹ˆ๋‹ค.

RC3์— ๋Œ€ํ•ด ์ด ๋ฒ„๊ทธ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@manucorporat ์—ฌ์ „ํžˆ rc3์—์„œ ๋ฌธ์ œ๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋ฃจํŠธ๋ฅผ ์„ค์ •ํ•  ๋•Œ ํ˜„์žฌ ๋ณด๊ธฐ๋ฅผ ๋‹ซ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ณด๊ธฐ๋ฅผ ๋‹ซ๊ณ  ๋ฃจํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ธฐ๋ฅผ ํ‘ธ์‹œํ•˜๋ฉด ์™„์ „ํžˆ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์•ผ,

์ด์ „ ๋ฉ”์‹œ์ง€๋ฅผ ๋ชจ๋‘ ์ฝ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ๋Œ€๋‹ต์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋ ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ƒ์œ„ ํƒ์ƒ‰ ์Šคํƒ์„ ์ฐธ์กฐํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ™˜์˜ ํŽ˜์ด์ง€ ์˜ˆ:

์‹œ์ž‘ ํŽ˜์ด์ง€(๋ฃจํŠธ ํŽ˜์ด์ง€)

gotoFeature(): void {
  this.navCtrl.push(feature);
}

๊ธฐ๋Šฅ ํŽ˜์ด์ง€( ํƒญ ํฌํ•จ )

logout(): void {
  this.navCtrl.parent.parent.pop() //  back to welcome
}

ํƒญ์—๋Š” ๊ณ ์œ ํ•œ ํƒ์ƒ‰ ์Šคํƒ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํƒญ ํƒ์ƒ‰ ๊ฐœ์ฒด ์ˆ˜์ค€์—์„œ setRoot ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜์ง€๋งŒ ๋ฐ”๋‹ฅ๊ธ€์˜ ํƒญ ๋ธ”๋ก์€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ ๊ณต๊ธ‰์ž์—์„œ setRoot ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. App setRoot ๋ฐ ๋ณ€๊ฒฝ๋œ ํŽ˜์ด์ง€์ด์ง€๋งŒ ์™„๋ฃŒ๋˜๋ฉด ํƒ์ƒ‰(๋ฉ”๋‰ด)์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

๊ณต๊ธ‰์ž์˜ ๋‚ด ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

private _leaveGroup(user: modelUser, room: modelRoom): Promise<any> {
    return new Promise((resolve, reject) => {
      let loading = this.loadingCtrl.create({dismissOnPageChange: false});
      loading.present();

      this.ref.child(room.id).child('users').child(user.id).remove()
        .then(() => this.navCtrl.setRoot(PageDashboard))
        .then(() => loading.dismiss())
        .then(() => resolve())
        .catch(err => loading.dismiss().then(() => reject(err)));
    });
}

๋‚ด ์ •๋ณด์•ผ

์ฝ”๋ฅด๋„๋ฐ” CLI: 6.3.1
Ionic ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „: 2.0.0-rc.3
Ionic CLI ๋ฒ„์ „: 2.1.4
Ionic ์•ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „: 2.1.2
Ionic ์•ฑ ์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „: 0.0.45
iOS ๋ฐฐํฌ ๋ฒ„์ „: 1.9.0
ios-sim ๋ฒ„์ „: 5.0.9
OS: ๋งฅ OS X ์‹œ์—๋ผ
๋…ธ๋“œ ๋ฒ„์ „: v6.9.1
Xcode ๋ฒ„์ „: Xcode 8.1 ๋นŒ๋“œ ๋ฒ„์ „ 8B62

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— setrroot ๋ฌธ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ์—ฌ๋Ÿฌ setroot ๋ฌธ์ด ์ฃผ์–ด์ง„ ์‹œ๊ฐ„, ์ฆ‰ ๋ Œ๋”๋ง ์ „์— ์‹คํ–‰๋˜๋ฉด Ionic์ด ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ œ ๊ฒฝ์šฐ์—๋Š” ํƒ์ƒ‰์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ RC4์—์„œ ๋‚ฏ์„  ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ๋ฉ”๋‰ด/๋Œ€์‹œ๋ณด๋“œ๋กœ ์ง€๊ธˆ ๋ฃจํŠธ๋ฅผ ์„ค์ •ํ•  ๋•Œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ํ—ค๋”์— ๋’ค๋กœ ๋ฒ„ํŠผ์„ ํ‘œ์‹œํ•˜๋Š” ๋ทฐ ์Šคํƒ์— ๋‚จ์•„ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ๋™์ผํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ

๋‚˜๋Š” ์ด๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด location.reload๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž ๋“ฑ๋ก ์ค‘์—๋งŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”์ฐํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ... ์ด ๋ฌธ์ œ๊ฐ€ ๋งŽ์€ ์ด์œ ๋กœ ์ข…๋ฃŒ๋œ ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ์•„์›ƒ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

// app.component.ts
events.subscribe('logout', () => {
  localStorage.removeItem('token');
  this.rootPage = LoginPage;
 });

์ง€๊ธˆ ๋กœ๊ทธ์•„์›ƒ:

// pages/home/home.ts
  logout() {
    this.events.publish('logout');
  }

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„. ๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ์ €๋Š” ํ˜„์žฌ Ionic 2.0.0-rc.4๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•,

//์ด ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
 '@angular/core'์—์„œ { Component, ViewChild } ๊ฐ€์ ธ์˜ค๊ธฐ;
 import { Platform, MenuController, Nav } from 'ionic-angular';

 ๋‚ด๋ณด๋‚ด๊ธฐ ํด๋ž˜์Šค MyApp {
 //์ด ์†์„ฑ์„ ์„ค์ •
 @ViewChild(Nav) ํƒ์ƒ‰: ํƒ์ƒ‰;

 //์ด ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
 private openPage(ํŽ˜์ด์ง€: ๋ชจ๋“ ): ๋ชจ๋“  {
 //ํ† ํฐ ํ™•์ธ 
 this.loggedIn = this.service.canActivate();
 if (!this.loggedIn) {
 //๊ธฐ๋ก๋˜์ง€ ์•Š์Œ 
 this.nav.setRoot(๋กœ๊ทธ์ธ ํŽ˜์ด์ง€);
 } ๋˜ ๋‹ค๋ฅธ {
 //๋กœ๊ทธ
 this.nav.setRoot(ํ™ˆํŽ˜์ด์ง€);
 }
 this.menuCtrl.close();
 }

ํฌ์˜น!

๋‚ด ์•ฑ: https://github.com/siteslave/chiangmai-demo-app/blob/master/src/pages/main/main.ts#L96 -L100

import {
  ...
  App,
  ...
} from 'ionic-angular';

//=====================//
 logout() {
    localStorage.removeItem('token');
    let nav = this.app.getRootNav(); 
    nav.setRoot(LoginPage);
  }

๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

@joshuaohana์™€ ๋™์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

facebook ๋กœ๊ทธ์ธ ์ „์— setRoot๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
setRoot AFTER facebook์„ ์ˆ˜ํ–‰ํ•˜๋ฉด @joshuaohana์™€ ๋™์ผํ•œ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”.

(๋ฐฉ๊ธˆ ์ด ๋ณต์ œ๋ณธ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค: https://github.com/driftyco/ionic/issues/6297)

๋กœ๊ทธ์•„์›ƒ ์ž‘์—…์„ ์œ„ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค๋ฅธ ์ž‘์—… ์†”๋ฃจ์…˜์ด ์žˆ๋Š” nav์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ์•„๋ž˜์—์„œ ์ฐพ์œผ์‹ญ์‹œ์˜ค.

https://webcake.co/exploring-nav-hierarchy-in-the-ionic-2-tabs-page/

์•„๋ž˜์— ๋ถ™์—ฌ๋„ฃ์€ ์ฝ”๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€์น˜ ์žˆ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

'ionic-angular'์—์„œ { ์•ฑ } ๊ฐ€์ ธ์˜ค๊ธฐ;
...
์ƒ์„ฑ์ž(๋น„๊ณต๊ฐœ _app: ์•ฑ) {}

๋กœ๊ทธ ์•„์›ƒ() {
...

    // Now I'll access the root NavController for the app,
    // and use that to reset the nav stack

    const root = this._app.getRootNav();
    root.popToRoot();

    // since I only have two items in the root NavController,
    // I could also have run root.pop() instead

}
...

์ €์™€ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ํ•˜์‹  ๋ถ„๋“ค๋„ ๊ณ„์‹คํ…๋ฐ์š”.

"setRoot"๋ฅผ ํ†ตํ•œ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋™์‹œ์— "[root]=.." ๋ฐ”์ธ๋”ฉ์„ HTML ํ…œํ”Œ๋ฆฟ์—์„œ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ๋‘ ์ •๋ณด๋ฅผ ๋‹ค์‹œ ๋™๊ธฐํ™”ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ชจ๋ธ ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ฑฐํ•˜๊ณ  API๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฃจํŠธ๋ฅผ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๋งˆ์ดํด

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

@ly-dev ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ this._app.getRootNav().setRoot(EntryPage); ํ–ˆ๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € navController์™€ ๊ฐ™์€ ์œ„์น˜์ธ ionic-angular์—์„œ Nav๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
import { App, NavController } from 'ionic-angular';

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒ์„ฑ์ž์— ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.
constructor(public navCtrl: NavController, public appCtrl: App)

์ด์ œ rootnav์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
this.appCtrl.getRootNav().setRoot(YourComponent);

@AmitPoojary ๊ทธ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ํƒญ์œผ๋กœ ์ด๋™ํ•  ๋•Œ.

์˜ˆ : ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ํ™ˆ ํƒญ. ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ํด๋ฆญํ•  ๋•Œ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ณ  ๊ณ„์ • ํƒญ์œผ๋กœ ์ „ํ™˜ํ•œ ๋‹ค์Œ ๋กœ๊ทธ์•„์›ƒํ•˜๋ฉด ์ƒˆ๋กœ ๊ณ ์น  ๋•Œ๊นŒ์ง€ ๊ณ„์ • ํƒญ์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํ™ˆ ํƒญ์„ ํด๋ฆญํ•˜๊ณ  ๋” ์ด์ƒ ์ด๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋กœ๊ทธ์•„์›ƒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ํ™ˆ ํƒญ์˜ ๋‘ ๋ฒˆ์งธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ dom์˜ ๋งŽ์€ ํƒญ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ „๋ถ€๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  getRootNav ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋ฉ€๋ฆฌ ๋Œ์•„๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์—ฌ์ „ํžˆ Tab์„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฃผ์š” ๋ฐฉ๋ฌธ ํŽ˜์ด์ง€๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ €์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. tabComponent ๋‚ด์˜ ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ _navCtrl.setRoot()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋งŒ rootPage๋กœ ์„ค์ •๋˜์ง€๋งŒ ํ•˜๋‹จ์˜ ํƒญ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ œ์ž๋ฆฌ์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํƒญ์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์— ๊ณ„์† ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

image

์ด์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

let _nav = this.app.getRootNav(); _nav.setRoot(LoginPage);

๋˜๋Š” ํ•œ ์ค„

this.app.getRootNav().setRoot(LoginPage);

๋‚ด ์ƒˆ ์•ฑ์—๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์žฅ์น˜์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ํ‘ธ์‹œ๋งŒ ์ž‘๋™ํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ณ  ์ผ๋ถ€ ์†Œ์ผ“ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์„ ์ข…๋ฃŒํ•˜๊ณ  ๊ฐœ๋ฐœ ์ปดํ“จํ„ฐ์—์„œ ์—ฐ๊ฒฐ์„ ๋Š๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์„œ๋ฒ„ ์ธก์—์„œ ์—ฐ๊ฒฐ ํ™œ๋™์ด ๋ณด์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” uiktiomasfeliz ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์˜ค๋Š˜ ๋‚˜์ค‘์— ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ๋จธ๋ฆฌ๋ฅผ ์œ„๋กœ.

์˜ˆ. ๋‚˜๋Š” ๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์„ฑ์ทจํ–ˆ์Šต๋‹ˆ๋‹ค.

this.app.getRootNav().setRoot(SetupPage);

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์žฅ์น˜์˜ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค ...

(getRootNav)๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  getRootNavById๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ž˜์„œ... ์ด ์˜ค๋ฅ˜๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์•˜๊ณ  ์ด์ „ ํŒจ์น˜๋Š” ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :/

this.app.getRootNav().setRoot(LoginPage);

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊นจ์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...

์ด๊ฒƒ์€ ์ ์–ด๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฆด๋ฆฌ์Šค 3.5.3์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์›ฐํ”„, 3.5.3์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„, ์—ฌ์ „ํžˆ setRoot() ํ›„์— ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด ๋ฌธ์ œ ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค : this.navCtrl.setRoot(HomePage);

์—ฌ๊ธฐ์—์„œ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์˜จ 3.10.3

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค

๊ฐ€์ ธ์˜ค๊ธฐ ์•ฑ

'ionic-angular'์—์„œ { IonicPage, NavController, Nav, App } ๊ฐ€์ ธ์˜ค๊ธฐ;

๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ์‚ฌ์šฉ

const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("LoginPage");

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Android๊ฐ€ ์„ค์น˜๋œ iPhone4 ๋ฐ ๊ธฐํƒ€ ๊ธฐ๊ธฐ์—์„œ Hello World ์•ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ Ionic ๋ฐ CLI ๋ฒ„์ „.

๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” iPhone์˜ ๊ฒฝ์šฐ setRoot ํ˜ธ์ถœ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌดํšจ onGoClick(){
// ์ด ์ค„์€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
this.navCtrl.setRoot(ํ™ˆํŽ˜์ด์ง€);

// ์ด ์ค„์€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
this.app.getRootNav().setRoot(ํ™ˆํŽ˜์ด์ง€);
}

์ด๊ฒƒ์€ ๋˜ํ•œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

var ๋ฃจํŠธ = this.appCtrl.getRootNav();
root.setRoot(ํ™ˆํŽ˜์ด์ง€);
root.popToRoot();

๋ฌธ์•ˆ ์ธ์‚ฌ.

์•ˆ๋…•ํ•˜์„ธ์š” @alemdg ์ œ ์ƒ๊ฐ์—๋Š” ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ…์ŠคํŠธ์ฒ˜๋Ÿผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ,

๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋ ค๋ฉด ํ…์ŠคํŠธ( "HomePage" )์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•˜๊ณ  ์ด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.

const ๋ฃจํŠธ = this.app.getRootNav();

๋‹ค์Œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

const ๋ฃจํŠธ = this.app.getRootNav();
root.popToRoot();
root.setRoot("ํ™ˆํŽ˜์ด์ง€");

์ด ๊ฐœ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ

'ionic-angular'์—์„œ { IonicPage, NavController, NavParams, Nav, App } ๊ฐ€์ ธ์˜ค๊ธฐ;

๊ฑด์„ค์ž(
๊ณต๊ฐœ ์•ฑ: ์•ฑ
) {

์ฒซ ๋ฒˆ์งธ๋Š” popToRoot์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ์ƒˆ ๋ฃจํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.)

๋ฌดํšจ onGoClick(){
// ์ด ์ค„์€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
this.navCtrl.setRoot( "ํ™ˆํŽ˜์ด์ง€" );

// ์ด ์ค„์€ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
root.popToRoot();
root.setRoot( "ํ™ˆํŽ˜์ด์ง€" );
}

์ด๊ฒƒ์€ ๋˜ํ•œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

const ๋ฃจํŠธ = this.appCtrl.getRootNav();
root.popToRoot();
root.setRoot( "ํ™ˆํŽ˜์ด์ง€" );

@spidermay ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ˆ˜์ž…ํ–ˆ๋‹ค
'ionic-angular'์—์„œ { IonicPage, NavController, NavParams, Nav, App } ๊ฐ€์ ธ์˜ค๊ธฐ;

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰
const ๋ฃจํŠธ = this.app.getRootNav();
root.popToRoot();
root.setRoot("ํ™ˆํŽ˜์ด์ง€");

ํ•˜์ง€๋งŒ ๋ฒ„ํŠผ์„ ๋‘ ๋ฒˆ ํด๋ฆญํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค....

์ƒˆ๋กœ ๊ณ ์นจ์ด ๋ˆ„๋ฝ ๋œ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค ....

๋‚˜๋Š” ์ด๊ฒƒ์„ 3.7.1์—์„œ ๋ณด๊ณ  ์žˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

this.menu.close();
this.nav.setRoot(ํ™ˆํŽ˜์ด์ง€).then(()=>{
this.nav.popToRoot();
}).catch(์˜ค๋ฅ˜=>{
๊ฒฝ๊ณ (err.toString());
});

์•ˆ๋…•ํ•˜์„ธ์š” @FatehiAlqadasi , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋กœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜:
C@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
reduce@[๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ]
O@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:12952
transform@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:14339
Ce@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
์ฆ‰ @ ํŒŒ์ผ ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:1046
Te@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:518
no@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:5140
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:42:25653
updateRenderer@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:4409
Se@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:328
We@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:3041
Ge@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:336
๊ฐ์ง€ ๋ณ€๊ฒฝ @ ํŒŒ์ผ ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:6:5799
_viewAttachToDOM@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:22059
_transition@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:23173
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9288
onInvoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1143
invoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
run@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invokeTask@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9972
onInvokeTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1047
invokeTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9900
runTask@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:5153
o@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
์˜ค๋ฅ˜:
C@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
reduce@[๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ]
O@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:12952
transform@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:14339
Ce@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
์ฆ‰ @ ํŒŒ์ผ ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:1046
Te@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:518
no@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:5140
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:42:25653
updateRenderer@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:4409
Se@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:328
We@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:3041
Ge@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:336
๊ฐ์ง€ ๋ณ€๊ฒฝ @ ํŒŒ์ผ ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:6:5799
_viewAttachToDOM@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:22059
_transition@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:23173
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9288
onInvoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1143
invoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
run@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invokeTask@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9972
onInvokeTask@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1047
invokeTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9900
runTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:5153
o@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
dispatchEvent@[๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ]
handleTapPolyfill@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:18:6423
pointerEnd@file //var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:18:5144
[๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ]
handleTouchEnd@file ///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:19:19943
[๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ]

@tonyawad88
๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

logout(){
this.navCtrl.setRoot("LoginPage");
this.navCtrl.push("LoginPage");

}

2๋…„ ๋œ ๋ฒ„๊ทธ, ์—ฌ์ „ํžˆ ์•„๋ฌด๋„ ๊ฐํžˆ ๊ณ ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค... Ionic 3์—์„œ๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”,

๋ฃจํŠธ ํŽ˜์ด์ง€์—์„œ๋„ ๋‚ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ํƒญ ๋ฐ–์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํƒญ์˜ ์ž์‹์ฒ˜๋Ÿผ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํƒญ ํŽ˜์ด์ง€.
1st

๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ์„ธ๋ถ€ ์ •๋ณด ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋””๋ ‰์…˜๋˜์—ˆ์ง€๋งŒ ํƒญ ํŽ˜์ด์ง€ ๋‚ด๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์ด...

2nd

๋„์™€์ค˜,

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

[email protected]์—์„œ ์ด ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด app.module์—์„œ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ ์—†์ด ํ•˜๋ฃจ ์ข…์ผ nav.setRoot()๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— DeepLinkConfig์™€ ์—ฐ๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฐ€์„ค์€ setRoot()์˜ ํ›„์† ํ˜ธ์ถœ ํ›„ ๋”ฅ ๋งํฌ ๋กœ์ง์ด window.location ์ด์ „์— ํƒ์ƒ‰ ์Šคํƒ์ด ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋ฉฐ ๋”ฅ ๋งํฌ ์ฝ”๋“œ๋Š” window.location์ด ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋‹น์‹ ์ด setRoot()๋ฅผ ๊ทธ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) ์Šคํƒ, ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ๋ฉ€๋ฆฌ ํƒ์ƒ‰ํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ํŽ˜์ด์ง€๋กœ ๋‹น์‹ ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

await this.nav.push(page, params);
this.nav.remove(0, this.nav.length() - 1);

@jknisley ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์œผ๋กœ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

detailEvent(eventItem) {
    this.app.getRootNav().push(DetailEventsPage, { itemUp: eventItem });  
  }

์ด ์ฝ”๋“œ๋Š” ๋‚˜๋ฅผ ์ƒˆ ํŽ˜์ด์ง€์™€ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ(ํƒญ ํŽ˜์ด์ง€ ์•„๋ž˜ ์•„๋‹˜)์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค.

ํ›„์†์„ ์œ„ํ•ด ์—ฌ๊ธฐ์— ๋‚จ๊ฒจ ๋‘์‹ญ์‹œ์˜ค. ์ด ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์€ ๋ถ€์ž‘์šฉ ์—†์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @uiktiomasfeliz์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

cli ํŒจํ‚ค์ง€: (/usr/local/lib/node_modules)

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€:

cordova (Cordova CLI) : 7.1.0

๋กœ์ปฌ ํŒจํ‚ค์ง€:

@ionic/app-scripts : 3.1.2
Cordova Platforms  : android 6.3.0 ios 4.5.4
Ionic Framework    : ionic-angular 3.9.2

์ฒด๊ณ„:

ios-deploy : 1.9.2
Node       : v8.9.1
npm        : 5.7.1
OS         : macOS High Sierra
Xcode      : Xcode 9.3 Build version 9E145
async logOut() {
    await this.authProvider.logout();
    await this.app.getRootNav().setRoot('LoginPage');
  }

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด ํƒ์ƒ‰ ์Šคํƒ์„ ์„ค์ •ํ•˜๊ณ  ์ด์ „ ํƒ์ƒ‰ ์Šคํƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์˜จ ๊ฐ 3.9.2 ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

this.navCtrl.remove(0, this.navCtrl.length() - 1);
this.navCtrl.insert(0, MainPage);
this.navCtrl.pop();

๋ฌธ์ œ๋ฅผ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด ๋ฌธ์ œ๋Š” ์›๋ž˜ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†๋Š” ๋Œ“๊ธ€์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž ๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ตœ์‹  ๋ฒ„์ „์˜ Ionic์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ํ…œํ”Œ๋ฆฟ์ด ์™„์ „ํžˆ ์ฑ„์›Œ์กŒ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰