Ionic ๋ฒ์ : ("x"๋ก ํ๋ ์ ํ)
[ ] 1.x
[x] 2.x
์ ์ถ ์ค์
๋๋ค
[ x] ๋ฒ๊ทธ ๋ณด๊ณ ์
[ ] ๊ธฐ๋ฅ ์์ฒญ
[ ] ์ง์ ์์ฒญ => ์ฌ๊ธฐ์ ์ง์ ์์ฒญ์ ์ ์ถํ์ง ๋ง๊ณ ๋ค์ ์ฑ๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ญ์์ค. https://forum.ionicframework.com/ ๋๋ http://ionicworldwide.herokuapp.com/
ํ์ฌ ํ๋:
์๋น์ค ์์ฑ์์ NavController๋ฅผ ์ฃผ์
ํ๋ฉด ๊ณต๊ธ์ ์ค๋ฅ ์์ด ์คํจํฉ๋๋ค.
์์๋๋ ๋์:
์ผํ๋ค
์ฌํ ๋จ๊ณ:
์ด ํด๋์ค๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค(๋ค๋ฅธ ๋ถ์ ์ฃผ์
์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค)
import {Interceptor, InterceptedRequest, InterceptedResponse} from 'ng2-interceptors';
import {NavController, Platform, AlertController} from "ionic-angular";
import {Injectable, Injector} from "@angular/core";
@Injectable()
export class ServerInterceptorService implements Interceptor {
constructor(public platform: Platform,
public alertCtl: AlertController,
public navCtl: NavController) {
}
public interceptBefore(request: InterceptedRequest): InterceptedRequest {
// Do whatever with request: get info or edit it
return request;
/*
You can return:
- Request: The modified request
- Nothing: For convenience: It's just like returning the request
- <any>(Observable.throw("cancelled")): Cancels the request, interrupting it from the pipeline, and calling back 'interceptAfter' in backwards order of those interceptors that got called up to this point.
*/
}
public interceptAfter(response: InterceptedResponse): InterceptedResponse {
// Do whatever with response: get info or edit it
console.log("////////////", response)
return response;
/*
You can return:
- Response: The modified response
- Nothing: For convenience: It's just like returning the response
*/
}
}
์์ ํด๋์ค๋ app.module.ts์ http ์ ๊ณต์๋ฅผ ๋์ฒดํฉ๋๋ค.
providers:[
ServerInterceptorService,
{
provide: Http,
useFactory: interceptorFactory,
deps: [XHRBackend, RequestOptions, ServerInterceptorService]
},
...]
๋ค๋ฅธ ์ข ์์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฃผ์ ๋ฉ๋๋ค.
https://forum.ionicframework.com/t/why-cant-i-import-navcontroller-and-viewcontroller-into-service-or-app/40999/26 ์ ๋ฐ๋ฅด๋ฉด
๊ทธ ๋ง
์ด๊ฒ์ ๋ํด ์ฐจ์๋ฒจ์ ์ธ๋ฆฌ๊ธฐ ์ํด ViewController ๋๋ NavController๋ฅผ Service์ ์ฃผ์ ํด์๋ ์๋ฉ๋๋ค.
์ด๊ฒ์ ๊ทธ๋ค์ ์๋๋ ๋ชฉ์ ์ด ์๋๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์๊ฐ ๋ณด๋ ํ์ฑ ๋ณด๊ธฐ์ ๋ฐ๋ผ ์๋ํ๋ ์ ์ญ ์ธํฐ์ ํฐ๋ฅผ ์ฑ์ ์ด๋ป๊ฒ ์ถ๊ฐํด์ผ ํ๋์ง ์๋ ค์ฃผ์ธ์.
๋ด๋ถ ๋ ผ๋ฆฌ์ ๋ฐ๋ผ ๋ฌด์ธ๊ฐ๋ฅผ ๋ด๋ณด๋ธ๋ค๋ฉด ์ธํฐ์ ํฐ ์๋น์ค๋ฅผ ์์ ํ๊ฑฐ๋ ๊ตฌ๋ ํ๋๋ก ๊ฐ ๋ทฐ ๊ตฌ์ฑ ์์์ ์ง์ํ์ฌ ์ถ์ ์ง๋์น๊ฒ ๋ณต์กํ๊ฒ ๋ง๋ค์ด์ ๋ทฐ๊ฐ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋์๊ฐ์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋๋ก ํ ๊น์?
~์ ๋ฐ๋ฅด๋ฉด
https://medium.com/coding-snippets/ionic-2-ui-alert-from-a-angular-2-service-221a2e526760#.spxbdpfz1
constructor(private app: IonicApp) {}
let alert = Alert.create({title: 'Error', message: message, buttons: ['OK']});
var nav = this.app.getActiveNav();
nav.present(alert
๋๋ฅผ ์ํด rc3์์ ์๋ํ์ง ์์ต๋๋ค.
์ ๊ฐ ์์ ์ ๋์น๊ณ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง...
Angular ํ์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด _์ด๊ฒ์ ๋ณด๊ธฐ ๊ตฌ์ฑ ์์์ด๊ณ ๊ทธ๊ฒ์ ์๋น์ค ๊ฐ์ฒด๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์ ์ผ์ข ์ ๋ถ๋ฅ ๊ณ ์ ๋๋ฌธ์ ์์ ํ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ ๋์์ด ๋์ง ์์ต๋๋ค. ๊ทธ๋ค ๋ชจ๋๋ ํ์ํ ๋ ์๋ก์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ป์ ์ ์๊ณ ๋ ์ป์ ์ ์์ด์ผ ํ๋ ๊ฐ์ฒด์ ๋๋ค.
๊ฒ๋ค๊ฐ ์ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ NavController๋ ๋จ์ํ ๋ณด๊ธฐ ๊ฒฐํฉ ํด๋์ค๋ณด๋ค ๋ ์ค์ผ์คํธ๋ ์ด์ ๋ ์ ์ญ ์ปจํธ๋กค๋ฌ์ ๋๋ค. ๋ฐ๋ผ์ NavController๋ "ํต์ฌ"์ด๋ฏ๋ก ์ด ๋์์ธ์ ์ฌ๊ณ ํ๊ฑฐ๋ Ionic ํต์ฌ ๋ชจ๋์ ์ค์ ์ง์ค์ ์ฑ ์ ์ฒด ์๋น์ค๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์ฃผ ๊ฐ๋จํ ๋๋ฌ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ app.component.ts ๋ด์์,์ด ๋๋ผ์ด์๊ฒ
@ViewChild('carguardNav') navCtrl: NavController
๋ค์๊ณผ ๊ฐ์ ๋ค๋ฅธ ์๋น์ค ์ ๊ณต์์๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
myGlobalService.nav = this.navCtrl
ํ๋ซํผ ์ด๊ธฐํ ๋จ๊ณ์์ MyGlobalService์ ์์กดํ๊ณ ์ฃผ์ ํ ๋ค๋ฅธ ์๋น์ค์์ ๊ฒ์ํ ์ ์์ต๋๋ค.
์ฌ๋ณด์ธ์! ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ด ์ฃ์กํฉ๋๋ค. ๋ฐ๋ผ์ ์๋น์ค์ NavController๊ฐ ์๊ธฐ ๋๋ฌธ์ NavController๋ฅผ ์๋น์ค์ ์ฃผ์ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ Angular ์ข ์์ฑ ์ฃผ์ ์ด ์ด๋ค NavController๊ฐ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์ค๋์ง ์์ง ๋ชปํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํจ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ์ตํด์ผ ํ ์ค์ํ ์ ์ ์ด๊ฒ์ด NavController์ ํต์ฌ์ด ์๋๋ผ ํ์ค Angular DI ์ค๋ฅ๋ผ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๊ณ ์๋ค๋ฉด ์ด๋ฒคํธ ์ด๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ธฐ๋ฅ์ ์ป์ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ ์ธก์ ์ค๋ฅ๊ฐ ์๋๋ผ ๋จ์ํ Angular 2์์ ์ข ์์ฑ ์ฃผ์ ์ด ์๋ํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ผ๋ ค ํ์ง๋ง ์ค์ ์ง์ค์ ์ฑ ์ ์ฒด navcontroller ์๋น์ค ์์ด๋์ด์ ๋ํ ๊ธฐ๋ฅ ์์ฒญ์ ์ฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์์ ์ธ๊ธ. Ionic์ ์ฌ์ฉํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ฌ์ค ๋๋ ๊ฑฑ์ ํ ์ ์๋ ๋ ๋ค๋ฅธ ์๋ฃจ์ ์ ๋ง๋ค์์ต๋๋ค. IoC ํจํด์ ํตํด ๋ณด๊ธฐ ๋ฐ ์๋น์ค ๊ตฌ์ฑ ์์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ฑ ์ ์ฒด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
@barocsi ์๋ฃจ์ ์ ๊ฒ์ํ์๊ฒ ์ต๋๊น? ๋๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉด ํด์๋ค.
๊ฐ์ ๋ก ๊ฒํฐ์ ์ธ์ ํฐ์ ํจ๊ป ์ผํ๊ฒ ํ์ด
constructor(
protected injector: Injector
) {
...
get navCtrl(): NavController {
return this.injector.get(NavController);
}
@bobrosoft ์์ ์์ ๊ฐ ์์ต๋๊น? ๊ทํ์ ์ฝ๋์ ํจ๊ป "Navcontroller์ฉ ์ธ์ ํฐ ์์"์ด ๋ค์ ํ์๋ฉ๋๋ค.
@m3l7 ๋ค์ ์๋:
constructor(
protected app: App,
...
get navCtrl(): NavController {
return this.app.getRootNav();
}
@bobrosoft ok, ์๋ํฉ๋๋ค. ๋ฌธ์ ๋ nav.push(MyComponent)๋ฅผ ์ง์ ํธ์ถํ๋ฉด ์ข ์์ฑ ๋ฃจํ๊ฐ ๋ฐ์ํ๋ฏ๋ก nav.push๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ "๋ผ์ฐํฐ" ์๋น์ค์์ ํฌ์ฐฉํ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ๋ก ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. (์ด ์๋ฃจ์ ์ด ํจ๊ณผ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค).
ionic2์ ๊ณ ๊ธ ๋ผ์ฐํ ์๋ฃจ์ ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.. ๊ธฐ๋ณธ 401 ์ธํฐ์ ํฐ๋ฅผ ๋ง๋ค๊ณ ์ฑ์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ํ๋ ค๊ณ ํฉ๋๋ค.
์๋ ํ์ธ์ @bobrosoft : ์ด๊ฒ์ด ๋ฐ๋ก ๊ทธ ๋ฐฉ๋ฒ์ ๋๋ค!
์์ฑ์(@Inject(ํ๋ซํผ) ํ๋ซํผ, @Inject(NavController) navController) {
}
์ด๊ฒ์ ์ฌ๊ธฐ์ ์ค๋ช ๋์ด ์์ต๋๋ค: https://github.com/driftyco/ionic/issues/5543
@mpeguero ๋ ์๋น์ค(์๋น์ค์ ๊ดํ ๊ฒ์ ๋๋ค.)๊ฐ ์ด๊ธฐ ๋จ๊ณ์์ ์ธ์คํด์คํ๋๊ณ ๊ธฐ์ ์ ์ผ๋ก ๋ด ์ฒซ ๋ฒ์งธ ๋ต๋ณ๊ณผ ๊ฑฐ์ ๋์ผํฉ๋๋ค. ๋๋ ์ ์ ๊ทธ๊ฒ์ ํ์ธํ๋ค.
๊ทธ ์๋ฃจ์
constructor(
protected app: App,
...
get navCtrl(): NavController {
return this.app.getRootNav();
}
๋ ์ข์ง๋ง ์ด์์ ์ด์ง๋ ์์ต๋๋ค.
Ionic ๋ฌธ์์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ์ ์๋ํฉ๋๋ค.
Android์ฉ Outlook ๋ฐ๊ธฐ http://aka.ms/ghei36
2017๋ 3์ 20์ผ ์์์ผ ์ค์ 4์ 44๋ถ -0400์, "Vladimir Tolstikov" < [email protected] [email protected] >์ด(๊ฐ) ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@mpeguero https://github.com/mpeguero ์๋น์ค(์๋น์ค์ ๊ดํ ๊ฒ์ ๋๋ค)๊ฐ ์ด๊ธฐ ๋จ๊ณ์์ ์ธ์คํด์คํ๋๊ณ ๊ธฐ์ ์ ์ผ๋ก ๋ด ์ฒซ ๋ฒ์งธ ๋ต๋ณ๊ณผ ๊ฑฐ์ ๋์ผํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. ๋๋ ์ ์ ๊ทธ๊ฒ์ ํ์ธํ๋ค.
๊ทธ ์๋ฃจ์
๊ฑด์ค์(
๋ณดํธ๋ ์ฑ: ์ฑ,
...
navCtrl() ๊ฐ์ ธ์ค๊ธฐ: NavController {
this.app.getRootNav()๋ฅผ ๋ฐํํฉ๋๋ค.
}
๋ ์ข์ง๋ง ์ด์์ ์ด์ง๋ ์์ต๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub https://github.com/driftyco/ionic/issues/9581#issuecomment-287701528 ์์ ํ์ธํ๊ฑฐ๋ https://github.com/notifications/unsubscribe-auth/ABvDpy- ์ค๋ ๋๋ฅผ ์์๊ฑฐ
์ด ๋ฌธ์ ์ ๋ํ ํ์ฌ ์๋ฃจ์ ์ ๋ฌด์์ ๋๊น? ์ธํฐ์ ํฐ๊ฐ 401 ๋๋ 403์ HttpErrorResponse ์ํ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ๋ก๊ทธ์์ ํ์ด์ง๋ฅผ ์ด๋ ค๊ณ ์๋ํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค. ์ ๋ง ๋ถ๊ฐ๋ฅํด ๋ณด์ ๋๋ค.
๊ธ๋ก๋ฒ ์๋น์ค๊ฐ NavController
์ฃผ์
ํ๊ณ ์ธ์คํด์คํํ์ง ์๋๋ค๋ ๊ฒ๋ ์์์
๋๋ค. ๊ตฌ์ฑ ์์๊ฐ private navCtrl: NavController
๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ global-function-provider
๋ ์ฌ์ฉํ๋ ํ์ด์ง A์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ด์ ์ด ๊ณต๊ธ์๊ฐ ์์ฒด NavController
์ฃผ์
ํ๊ณ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์์์ ๊ณต๊ธ์๋ฅผ ํธ์ถํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ์๊ฐ์๋ ํ์ด์ง์ navCtrl
๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋๋ง๋ค ์ฌ์ฉ ์ค์ธ ์ ์ญ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ฌธ์ ๋ฅผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ด ๋ฌธ์ ๋ ์๋ ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋ ๋๊ธ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ๊ฒจ ์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ์ ํ ์ต์ ๋ฒ์ ์ Ionic์์ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ํ ํ๋ฆฟ์ด ์์ ํ ์ฑ์์ก๋์ง ํ์ธํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@m3l7 ๋ค์ ์๋: