Ionic-framework: Ionic v3 - λŸ°νƒ€μž„ 였λ₯˜ μž‘νžˆμ§€ μ•ŠμŒ(약속 쀑): removeViewλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 04μ›” 29일  Β·  31μ½”λ©˜νŠΈ  Β·  좜처: ionic-team/ionic-framework

Ionic 버전: ("x"둜 ν•˜λ‚˜ 선택)
[ x] 3.x

제좜 μ€‘μž…λ‹ˆλ‹€
[x ] 버그 λ³΄κ³ μ„œ

ν˜„μž¬ 행동:

이메일과 λΉ„λ°€λ²ˆν˜Έ 2개의 ν•„λ“œκ°€ μžˆλŠ” κ°€μž… 양식이 있으면 μ‚¬μš©μžκ°€ μ„±κ³΅μ μœΌλ‘œ μƒμ„±λ˜μ§€λ§Œ 이 μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€.

λŸ°νƒ€μž„ 였λ₯˜
μž‘νžˆμ§€ μ•ŠμŒ(약속 쀑): removeViewλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

μ˜ˆμƒλ˜λŠ” λ™μž‘:

이 μ½”λ“œλ² μ΄μŠ€κ°€ v3 package.json으둜 μ—…κ·Έλ ˆμ΄λ“œλ˜λ©΄ μ½”λ“œλŠ” v2μ—μ„œ 였λ₯˜ 없이 μž‘λ™ν•˜λ©° 약속에 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

κ΄€λ ¨ μ½”λ“œ:

signupUser(){
    if (!this.signupForm.valid){
      console.log(this.signupForm.value);
    } else {
      this.authData.signupUser(this.signupForm.value.email, this.signupForm.value.password)
      .then(() => {
        this.nav.setRoot(HomePage);
      }, (error) => {
        this.loading.dismiss().then( () => {
          var errorMessage: string = error.message;
            let alert = this.alertCtrl.create({
              message: errorMessage,
              buttons: [
                {
                  text: "Ok",
                  role: 'cancel'
                }
              ]
            });
          alert.present();
        });
      });

      this.loading = this.loadingCtrl.create({
        dismissOnPageChange: true,
      });
      this.loading.present();
    }
  }

기타 정보:

Stack trace
Error: Uncaught (in promise): removeView was not found
    at d (http://localhost:8101/build/polyfills.js:3:3991)
    at l (http://localhost:8101/build/polyfills.js:3:3244)
    at l (http://localhost:8101/build/polyfills.js:3:2930)
    at http://localhost:8101/build/polyfills.js:3:3758
    at t.invokeTask (http://localhost:8101/build/polyfills.js:3:12256)
    at Object.onInvokeTask (http://localhost:8101/build/main.js:4394:37)
    at t.invokeTask (http://localhost:8101/build/polyfills.js:3:12177)
    at n.runTask (http://localhost:8101/build/polyfills.js:3:7153)
    at a (http://localhost:8101/build/polyfills.js:3:2312)
    at <anonymous>
package.json contains

{
  "name": "ionic-hello-world",
  "version": "0.0.0",
  "author": "Ionic Framework",
  "homepage": "http://ionicframework.com/",
  "private": true,
  "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
  },
  "dependencies": {
    "@angular/common": "4.0.2",
    "@angular/compiler": "4.0.2",
    "@angular/compiler-cli": "4.0.2",
    "@angular/core": "4.0.2",
    "@angular/forms": "4.0.2",
    "@angular/http": "4.0.2",
    "@angular/platform-browser": "4.0.2",
    "@angular/platform-browser-dynamic": "4.0.2",
    "@ionic-native/core": "3.4.2",
    "@ionic-native/splash-screen": "3.4.2",
    "@ionic-native/status-bar": "3.4.2",
    "@ionic/storage": "2.0.1",
    "angularfire2": "^2.0.0-beta.8",
    "firebase": "^3.9.0",
    "ionic-angular": "3.1.0",
    "ionicons": "3.0.0",
    "rxjs": "5.1.1",
    "sw-toolbox": "3.4.0",
    "zone.js": "^0.8.5"
  },
  "devDependencies": {
    "@ionic/app-scripts": "1.3.4",
    "typescript": "~2.2.1"
  },
  "cordovaPlugins": [
    "cordova-plugin-whitelist",
    "cordova-plugin-console",
    "cordova-plugin-statusbar",
    "cordova-plugin-device",
    "cordova-plugin-splashscreen",
    "ionic-plugin-keyboard"
  ],
  "cordovaPlatforms": [
    "ios",
    {
      "platform": "ios",
      "version": "",
      "locator": "ios"
    }
  ],
  "description": "An Ionic project"
}

Ionic 정보: (터미널/cmd ν”„λ‘¬ν”„νŠΈμ—μ„œ ionic info λ₯Ό μ‹€ν–‰ν•˜κ³  좜λ ₯을 μ•„λž˜μ— λΆ™μ—¬λ„£κΈ°):

Ionic Framework: 3.1.0
Ionic App Scripts: 1.3.4
Angular Core: 4.0.2
Angular Compiler CLI: 4.0.2
Node: 6.10.1
OS Platform: macOS Sierra
Navigator Platform: MacIntel
User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

loading.dismiss()λ₯Ό μˆ˜λ™μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” κ²½μš°μ—λŠ”dismissOnPageChangeλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ λ™μΌν•œ λ‘œλ”©μ„ 두 번 ν•΄μ œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  31 λŒ“κΈ€

loading.dismiss()λ₯Ό μˆ˜λ™μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” κ²½μš°μ—λŠ”dismissOnPageChangeλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ λ™μΌν•œ λ‘œλ”©μ„ 두 번 ν•΄μ œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ¬Έμ œλŠ” 주둜 => this.nav.setRoot(HomePage) 둜 인해 λ°œμƒν•©λ‹ˆλ‹€.
λ‚˜λŠ” κ·Έκ°€ ꡬ성 μš”μ†Œλ₯Ό νŒμ—…ν•˜κ³  싢을 λ•Œ λ¬Έμ œκ°€ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ "μž„μ‹œ" μ†”λ£¨μ…˜ 쀑 ν•˜λ‚˜λŠ” this.nav.setRoot(HomePage)λ₯Ό λ‹€μŒκ³Ό 같이 λ°”κΎΈλŠ” κ²ƒμž…λ‹ˆλ‹€.

this.nav.insert(0,ν™ˆνŽ˜μ΄μ§€);this.nav.popToRoot();

κ·Έλ ‡κ²Œν•¨μœΌλ‘œμ¨ ν™ˆνŽ˜μ΄μ§€λ₯Ό 루트둜 μ„€μ •ν•˜κ³  λ‹€λ₯Έ λͺ¨λ“  ꡬ성 μš”μ†Œλ₯Ό νŒν•©λ‹ˆλ‹€.

λ¬Έμ œκ°€ 있으면 λ§ν•΄μ€˜

이 였λ₯˜λ„ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ion-app-scriptsλ₯Ό 1.3.6μ—μ„œ 1.3.4둜 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 당신이 1.3.4λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 무슨 일인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

이온 정보:

Cordova CLI: 6.5.0 
Ionic Framework Version: 3.1.0-201704300143
Ionic CLI Version: 2.2.3
Ionic App Lib Version: 2.2.1
Ionic App Scripts Version: 1.3.4
ios-deploy version: 1.9.1 
ios-sim version: Not installed
OS: macOS Sierra
Node Version: v6.9.4
Xcode version: Xcode 8.3.2 Build version 8E2002

v2.0.3μ—μ„œ 3.0.0으둜 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  v3.1.0으둜 λ‹€μ‹œ μ—…λ°μ΄νŠΈν•œ 후에도 이 문제λ₯Ό λ°œκ²¬ν–ˆμ§€λ§Œ ν”„λ ˆμž„μ›Œν¬ v2.0.3μ—μ„œλŠ” 이 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ 3.0.0 λ˜λŠ” 3.1.0μ—μ„œ λ°œκ²¬λ˜μ—ˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
이 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ λ‹€μš΄κ·Έλ ˆμ΄λ“œν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이제 λ‚΄ 이온 정보가 μ•„λž˜μ— μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ₯΄λ„λ°” CLI: 6.4.0
Ionic ν”„λ ˆμž„μ›Œν¬ 버전: 3.1.0
Ionic CLI 버전: 2.1.18
Ionic μ•± 라이브러리 버전: 2.1.9
Ionic μ•± 슀크립트 버전: 1.3.4
iOS 배포 버전: 1.9.0
ios-sim 버전: 5.0.13
OS: macOS μ‹œμ—λΌ
λ…Έλ“œ 버전: v6.9.4
Xcode 버전: Xcode 8.3.2 λΉŒλ“œ 버전 8E2002

μ°Έκ³ : λ‚΄ ionic μ•± 슀크립트 버전도 1.3.4μž…λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈ, 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. (ν”„λ ˆμž„μ›Œν¬ 버전을 λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜μ§€ μ•Šκ³  μ—¬μ „νžˆ 3.1.0을 μ‚¬μš©ν•©λ‹ˆλ‹€)
μ•„λž˜μ™€ 같이 λ‘œλ“œμ— λŒ€ν•œ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν–ˆμœΌλ©° μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.

loading.present();
somePromiseMethod().then(()=>{
     loading.dismiss();
});
...

μ—κ²Œ

loading.present().then(()=>{
   somePromiseMethod().then(()=>{
      loading.dismiss();
   });
});

μ™œ μž‘λ™ν•©λ‹ˆκΉŒ? loading.present()κ°€ 비동기식 λ©”μ„œλ“œμ΄κΈ° λ•Œλ¬Έμ— loading.present()κ°€ 아직 μ‹€ν–‰ 쀑일 λ•Œ μˆ˜λ™μœΌλ‘œ loading.dismiss()λ₯Ό ν˜ΈμΆœν•  수 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μˆ˜λ™μœΌλ‘œ ν•΄μ œν•΄μ•Ό ν•˜λŠ” 경우 λ‘œλ“œκ°€ ν‘œμ‹œλ˜κ³  ν•΄μ œν•  수 μžˆλŠ” 보기가 μžˆλŠ”μ§€ 확인해야 ν•©λ‹ˆλ‹€. μœ„μ˜ λ‚΄ μ½”λ“œμ™€ 같이 present().then λ‹€μŒμ— λ‹€λ₯Έ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 이전 ν”„λ ˆμž„μ›Œν¬ 버전(2.0.3)에 이 λ¬Έμ œκ°€ μ—†λŠ” μ΄μœ λŠ” ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„, 저도 같은 λ¬Έμ œκ°€ μžˆμ—ˆμ§€λ§Œ return false; 이 κ²½κ³  μ²˜λ¦¬κΈ°μ—μ„œ λˆ„λ½λ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
λ‚˜λŠ” 이 이전 버전 3.1.1을 가지고 μžˆμ—ˆλ‹€

let alert = this.alertCtrl.create({
            message: "message....",
            buttons: [
              {
                text: "Cancel", handler: () => {
                  alert.dismiss();
                }
              },
              {
                text: "Sign up instead?", handler: () => {
                  alert.dismiss().then(() => {
                    self.nav.pop().then(data => {
                      self.nav.push(OtherPage);
                    });
                  });
                }
              }]
          });
          alert.present();

3.1.1둜 μ—…κ·Έλ ˆμ΄λ“œν•œ ν›„ return false; λ₯Ό ν•Έλ“€λŸ¬μ— λ„£μ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

let alert = this.alertCtrl.create({
            message: "message....",
            buttons: [
              {
                text: "Cancel", handler: () => {
                  alert.dismiss(); 
                  return false;
                }
              },
              {
                text: "Sign up instead?", handler: () => {
                  alert.dismiss().then(() => {
                    self.nav.pop().then(data => {
                      self.nav.push(OtherPage);
                    });
                  });
                  return false;
                }
              }]
          });
          alert.present();

λ¬Έμ„œμ—λŠ” λ‹€μŒκ³Ό 같이 λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€.
http://ionicframework.com/docs/api/components/alert/AlertController/

μ—¬κΈ°μ„œλ„ 같은 문제! λ‚˜λŠ” 두 λ²ˆλ‘œλ“œλ₯Ό κΈ°κ°ν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 λ‘œλ”©μ„ ν‘œμ‹œν•˜μ§€ μ•ŠμœΌλ©΄ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

getPosts() {
        if(this.loading != undefined){
            this.loading.dismiss();
        }

        this.loading = this.loadingCtrl.create({
            spinner: 'bubbles',
            content: 'Please wait...'
        });

        this.loading.present();
        return this.http.get(this.baseUrl + 'articles.php')
            .toPromise().then((result: Response) => {
                const data = result.json();
                this.articleRepo = data;
                if (this.items == undefined) {
                    this.updateItems(10, 0).then((err) => {
                        this.loading.dismiss();
                    });
                }else{
                    this.loading.dismiss();
                }
                return data;
            }).catch((err) => {
                this.loading.dismiss();
            });
    }
Your system information:

 ordova CLI: 6.3.1
Ionic Framework Version: 3.1.1
Ionic CLI Version: 2.1.8
Ionic App Lib Version: 2.1.4
Ionic App Scripts Version: 1.3.6
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Windows 10
Node Version: v6.10.1
Xcode version: Not installed

μ•ˆλ…•ν•˜μ„Έμš” xap5xap, alert.dismiss()λ₯Ό μ œκ±°ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€. λ”°λΌμ„œ κ·€ν•˜μ˜ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같을 κ²ƒμž…λ‹ˆλ‹€.

text: "Sign up instead?", handler: () => {
      self.nav.pop().then(data => {
            self.nav.push(OtherPage);
       });
}

μ•ˆλ…•ν•˜μ„Έμš” uzumakinaruto123, loading.present() 후에 .then()을 μΆ”κ°€ν•˜μ—¬ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€. λ”°λΌμ„œ κ·€ν•˜μ˜ μ½”λ“œλŠ” λ‹€μŒκ³Ό 같을 κ²ƒμž…λ‹ˆλ‹€.

this.loading.present().then(()=>{
     return this.http.get(this.baseUrl + 'articles.php')
     ...(your code)
});

Could you try to revise your code by add .then() after loading.present(), it works for me.
^ 문제λ₯Ό μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

λͺ¨λ‘λ“€ μ•ˆλ…•! 이 μ‹œμ μ—μ„œ 이것은 지원 μ§ˆλ¬Έμ— 더 가깝기 λ•Œλ¬Έμ— 이 μ§ˆλ¬Έμ„ 우리 포럼 μ΄λ‚˜ [slack channel](https://ionicworldwide.herokuapp.com/]에 κ°€μ Έκ°ˆ 것을 μ΄‰κ΅¬ν•©λ‹ˆλ‹€. Ionic을 μ‚¬μš©ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

λΉ λ₯Έ μˆ˜μ •μ€ λ‘œλ”λ₯Ό null둜 λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€.
if(this.loader){ this.loader.dismiss(); this.loader = null; }

그러면 λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆλ‹€.

이 μ‹œλ„ :
this.loader.dismiss();
setTimeout(() => {
this.nav.setRoot('ν™ˆ');
});

그것은 λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ :)

μ£„μ†‘ν•©λ‹ˆλ‹€. μ›λž˜ λŒ“κΈ€μ΄ 잘λͺ»λ˜μ–΄μ„œ μ‚­μ œν–ˆμŠ΅λ‹ˆλ‹€. 광산은 경고와 관련이 μ—†μ§€λ§Œ 후속 λ‘œλ“œ μΈμŠ€ν„΄μŠ€μ™€ 관련이 있으며 ngAfterContentCheckedμ—μ„œ κ²½κ³ λ₯Ό μ œκ±°ν•˜λ €λŠ” μ‹œλ„μž…λ‹ˆλ‹€.

λ‚΄κ°€ μž‘μ„±ν•œ ν˜„μž¬ 방법은 μ—¬μ „νžˆ ​​이 문제λ₯Ό 일으 ν‚΅λ‹ˆλ‹€.

````
곡개 μ‡Όλ‘œλ”©(λ©”μ‹œμ§€) {
this.loadingObject = this.loading.create({λ‚΄μš©: λ©”μ‹œμ§€, ν•΄μ œOnPageChange: false});
this.loadingObject.present();
this.loadingObjectλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
}

public dismissLoading() {
    if (this.loadingObject) {
        try {
            this.loadingObject.dismiss();
        }
        catch (exception) {

        }
        this.loadingObject = null;
    }
}

````
이듀은 μ„œλΉ„μŠ€λ‘œ μ œκ³΅λ©λ‹ˆλ‹€. μ—¬κΈ°μ„œ 무엇이 잘λͺ»λ  수 μžˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. ionic 2μ—μ„œ ionic 3으둜 μ΄λ™ν•˜κΈ° μ „κΉŒμ§€λŠ” ν™•μ‹€νžˆ λ¬Έμ œκ°€ λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€ νƒμƒ‰κ³ΌλŠ” μ „ν˜€ 관련이 μ—†μŠ΅λ‹ˆλ‹€.

μ€‘μ²©λœ dom μš”μ†Œμ— λŒ€ν•œ 바인딩 (click)="callback()"이 이 문제의 μ›μΈμž„μ„ 인식할 λ•ŒκΉŒμ§€ λ™μΌν•œ λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

예 - λͺ¨λ‹¬ λŒ€ν™” μƒμžμ˜ λ‚΄μš©:

<ion-item detail-none *virtualItem="let unsentOffer" (click)="selectOffer(unsentOffer)">
      <ion-grid no-padding>
        <ion-row>
          <ion-col>
            <div class="project-name ellipsis line-count-1" (click)="selectOffer(unsentOffer)"><span ion-text text-bold>{{unsentOffer.description}}</span>
            </div>
            <div class="customer-name ellipsis line-count-1"><span ion-text>{{unsentOffer.firstNameLastName}}</span>
            </div>
          </ion-col>
        </ion-row>
      </ion-grid>
</ion-item>

selectOffer()μ—μ„œ λŒ€ν™” μƒμžλ₯Ό λ‹«μœΌλ©΄ 두 번 ν˜ΈμΆœλ©λ‹ˆλ‹€. 두 번째 λŒ€ν™” μƒμžλŠ” "removeViewλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€"와 μΆ©λŒν•©λ‹ˆλ‹€...

이 방법을 μ‚¬μš©ν•˜μ—¬ λ‹€μŒμ„ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
this.loading.dismissAll();

콜백 ν•¨μˆ˜λ‘œ 이 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ„ μ°Έμ‘°ν•˜μ„Έμš”.
this.viewCtrl.dismiss().then(()=>{
this.events.publish("goto",TabsPage,null,{root:true});
});

콜백 ν•¨μˆ˜λ‘œ μ‹œλ„

μž‘μ—… μ‹œνŠΈ λ˜λŠ” λͺ¨λ‹¬μ„ μ—°μ†ν•΄μ„œ μ—¬λŸ¬ 번 μ—΄ λ•Œ 이 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 그리고 그듀은 λ‹€λ₯Έ μΆœμ²˜μ—μ„œ μ—΄λ¦½λ‹ˆλ‹€. 특히 ioniκ°€ μ•‘μ…˜ μ‹œνŠΈμ—μ„œμ™€ 같이 λ·° 킬링을 μ²˜λ¦¬ν•  λ•Œ μˆ˜μ • 사항을 μ–΄λ–»κ²Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

_원본 및 기타 μœ μ‚¬ν•œ λ¬Έμ œμ— λŒ€ν•΄. μ½μ–΄λ³΄μ„Έμš”_

screen shot 2017-10-01 at 9 07 14 am

μœ„λŠ” loadController 에 λŒ€ν•œ μ½”λ“œμž…λ‹ˆλ‹€. μ• λ‹ˆλ©”μ΄μ…˜μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ 이동 쀑인 νŽ˜μ΄μ§€μ— μ•‘μ„ΈμŠ€ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” μ½”λ“œμ— μ£Όλͺ©ν•˜μ‹­μ‹œμ˜€. 이것은 λ‹€λ₯Έ ꡬ성 μš”μ†Œμ—μ„œ λ°œμƒν•˜λ©° 일반적으둜 νŽ˜μ΄μ§€μ—μ„œ ꡬ성 μš”μ†Œλ₯Ό ν‘œμ‹œν•˜λ„λ‘ μ„€μ •ν•œ μœ„μΉ˜μ— 따라 λ‹€λ¦…λ‹ˆλ‹€.

이것은 μ‹€νŒ¨ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€
screen shot 2017-10-01 at 9 23 35 am

λ§ˆμ§€λ§‰ λΆ€λΆ„μ—μ„œ μ½”λ“œκ°€ μ‹€νŒ¨ν•˜μ—¬ loadController _why?_λ₯Ό

setRoot()λ₯Ό ν˜ΈμΆœν•˜μ—¬ 탐색 μŠ€νƒμ„ μž¬μ„€μ •ν•˜κ³  더 이상 등둝 νŽ˜μ΄μ§€μ— μ•‘μ„ΈμŠ€ν•  수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 탐색 μŠ€νƒμ˜ μœ μΌν•œ νŽ˜μ΄μ§€λŠ” ν™ˆνŽ˜μ΄μ§€μž…λ‹ˆλ‹€. 이것은 μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ°œμƒν•΄μ•Ό ν•˜λŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.

ν•΄μ œ μ‹œκ°„μ„ μ•½ 1000ms둜 μ„€μ •ν•΄ λ³΄μ‹­μ‹œμ˜€. μ΄λ ‡κ²Œ ν•˜λ©΄ 탐색 μŠ€νƒμ˜ μ˜¬λ°”λ₯Έ μ’…λ£Œ νŽ˜μ΄μ§€ λ₯Ό ν™ˆνŽ˜μ΄μ§€μ— λ‹€μ‹œ μž‘μ„±ν•˜κ³  μ •μƒμ μœΌλ‘œ μ’…λ£Œν•  수 μžˆλŠ” μΆ©λΆ„ν•œ μ‹œκ°„μ΄ μ£Όμ–΄μ§‘λ‹ˆλ‹€.

μ„±κ°€μ‹  일이고 였λ₯˜κ°€ 거의 λ¬΄μž‘μœ„λ‘œ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— λˆ„κ΅°κ°€κ°€ μ΄κ²ƒμ˜ λ°”λ‹₯에 λ„λ‹¬ν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. λ‚˜λ₯Ό μœ„ν•΄ 탭을 λΉ λ₯΄κ²Œ λ³€κ²½ν•  λ•Œλ§ˆλ‹€ λ°œμƒν•©λ‹ˆλ‹€. λ‚΄ μ΅œμ„ μ˜ 진단은 그것이 경쟁 쑰건일 κ°€λŠ₯성이 맀우 λ†’λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚΄ μ†”λ£¨μ…˜μ€ ν•΄μ œ ν›„ 캐치λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  this.loading.dismiss().catch()

μ§€κΈˆκΉŒμ§€ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” κ·Έ νŒμ„ μ‹œλ„ν–ˆμ§€λ§Œ μ—¬μ „νžˆ λ¬Έμ œκ°€ 계속 ν‘œμ‹œλ©λ‹ˆλ‹€.
λ‚˜λŠ” 이것이 경쟁 μ‘°κ±΄μ΄λΌλŠ” @kaceo 에 μ–΄λŠ 정도 λ™μ˜ν•˜λ―€λ‘œ μ‹œκ°„ 초과λ₯Ό μΆ”κ°€ν•˜κ³  μž‘λ™ν•©λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ 였λ₯˜κ°€ λ‹€μ‹œ ν‘œμ‹œλ˜λŠ” 것을 보지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ:

setTimeout(() => {
        this.getData().subscribe(res => {
          this.loader.dismiss();
          this.items = res.docs;
        }, err => {
          this.loader.dismiss();
          console.log(err);
        });
      }, 100);

λ‚˜λŠ” 같은 문제λ₯Ό λ°œκ²¬ν•˜κ³  μ΄κ²ƒμœΌλ‘œ ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€.

  1. λ‚˜λŠ” λ‘œλ” ν•Έλ“€λŸ¬μ— λŒ€ν•œ 블둝 μ½”λ“œλ₯Ό 주석 μ²˜λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€ --> 였λ₯˜ ν•΄μ œ 및 이제 잘 μž‘λ™ν•©λ‹ˆλ‹€..
  2. μ›λž˜ μ½”λ“œλ‘œ λŒμ•„κ°„ λ‹€μŒ timeOut을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. --> 이제 잘 μž‘λ™ν•©λ‹ˆλ‹€.

이 μ½”λ“œλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€

setTimeout(()=>{
  // Here Code
})

λ‚  μœ„ν•΄ 일해!

같은 였λ₯˜κ°€ λœ¨λ”κ΅°μš”. "removeViewλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€"

λ‚΄ κ²½μš°μ™€ ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
λ¬Έμ œλŠ” λ‚΄ λ‘œλ”κ°€ 항상 처음 호좜될 λ•Œλ§Œ ν‘œμ‹œλœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 두 번째둜 ν‘œμ‹œν•΄μ•Ό ν•  λ•Œ 였λ₯˜κ°€ λ°œμƒν•˜κ³  앱이 λ‹€μš΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이와 같이 μƒμ„±μžμ—μ„œ λ‚΄ λ‘œλ”λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜κ³ μžˆμ—ˆμŠ΅λ‹ˆλ‹€ ...

public loading: Loading;
constructor(...){
    this.loading = this.loadingCtrl.create({ });

}

μƒμ„±μžμ—μ„œ ν•œ 번만 λŒ€μ‹  λ‘œλ”λ₯Ό ν‘œμ‹œν•˜κΈ° 전에 항상 this.loading = this.loadingCtrl.create({ }); ν˜ΈμΆœν•˜μ—¬ 였λ₯˜λ₯Ό μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.

이것이 μ΅œμ„ μ˜ 방법인지 ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ μ§€κΈˆμ€ μ„ νƒν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 그것이 λ‹Ήμ‹  쀑 μΌλΆ€μ—κ²Œ λ„μ›€μ΄λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

이것은 Ionic νŒ€μ—μ„œ "지원"으둜 ν‘œμ‹œλœ 미친 λ¬Έμ œμž…λ‹ˆλ‹€!

이 문제λ₯Ό λ°©μ§€ν•˜λ €λ©΄ LoadingController μžμ²΄μ— dismiss() 에 κ°„λ‹¨ν•œ if κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 문제둜 인해 LoadingProvider λ₯Ό μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” μ„±κ°€μ‹œλ‹€.

λΈŒλΌμš°μ € λ’€λ‘œ λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œλ§ˆλ‹€ λ‚΄ PWAμ—μ„œ 이 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. NavBar λ’€λ‘œ λ²„νŠΌμ΄ μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.
λ‹€μŒκ³Ό 같이 λ‘œλ”© 컨트둀러λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
loading.present().then(()=>{ //code to retrieve data; loading.dismiss(); });

λ”°λΌμ„œ 전체 μ½”λ“œλŠ” if(loading){ loading.dismiss(); loading = undefined } μ—¬μ•Ό ν•©λ‹ˆλ‹€.

@kaceo λ©”μ†Œλ“œλŠ” λ‚΄κ°€ 이것을 ν•  λ•ŒκΉŒμ§€ μ—¬μ „νžˆ 였λ₯˜λ₯Ό λ˜μ‘ŒμŠ΅λ‹ˆλ‹€.

loader.dismiss().catch(()=>{})

여기에 μ–ΈκΈ‰ https://github.com/ionic-team/ionic/issues/11776#issuecomment -314050068

단지 μ‹œλ„

`
'ionic-angular'μ—μ„œ { μ•±} κ°€μ Έμ˜€κΈ°;
내보내기 클래슀 PopoverPage {
μƒμ„±μž(곡개 navCtrl: NavController, 곡개 appCtrl: μ•±) {}

this.viewCtrl.dismiss().then(()=>{
setTimeout(()=>{
확인.dismiss().then(()=>{
this.appCtrl.getRootNav().setRoot('λŒ€μ‹œλ³΄λ“œ νŽ˜μ΄μ§€');
})
},300)
})
}
`

이것

this.loading.present().then( x=> { this.dataProvider.getData("assets/data/persons.json").subscribe((data: Array<Object>) => { this.fullPersonsList = data; this.filteredPersonsList = data; this.loading.dismiss().catch(() =>{}); });
});

λ‚˜λ₯Ό μœ„ν•΄ μΌν–ˆλ‹€

이건 κ·Έλƒ₯ 웃기닀. 여기에 λ‚˜μ—΄λœ λͺ¨λ“  μ†”λ£¨μ…˜μ„ μ‹œλ„ν–ˆμ§€λ§Œ μ„±κ³΅ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” 둜그인 νŽ˜μ΄μ§€λ₯Ό λͺ¨λ‹¬λ‘œ ν‘œμ‹œν–ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‚¬μ΄λ“œλ°” κΈ°λŠ₯을 μœ μ§€ν•˜λ©΄μ„œ λ‹«λŠ” μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
window.location.reload();
λ„ˆλ¬΄ μ–„λ°‰λ‹€...

@EduardoIbarra , @theo4u 의 μ†”λ£¨μ…˜μ΄ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

문제λ₯Ό μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! 이 λ¬Έμ œλŠ” μ›λž˜ λ¬Έμ œμ™€ 관련이 μ—†λŠ” λŒ“κΈ€μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ 잠겨 μžˆμŠ΅λ‹ˆλ‹€. 이것이 μ—¬μ „νžˆ μ΅œμ‹  λ²„μ „μ˜ Ionicμ—μ„œ λ¬Έμ œκ°€ λ˜λŠ” 경우 μƒˆ 문제λ₯Ό λ§Œλ“€κ³  ν…œν”Œλ¦Ώμ΄ μ™„μ „νžˆ μ±„μ›Œμ‘ŒλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰