2016-10-19 6 views
1

서비스와 관련된 기능을 로그인 페이지 구성 요소와 분리하려고하고 있는데 현재 self.context.logout is not a function의 줄에 오류가 있습니다. 아래, loginPage에 loginPage를 삽입하고 서비스 내의 일부 기능을 내 로그인 템플릿에 바인딩하려고합니다. 왜 이런 오류가 발생하는지 알고 싶습니다. 미리 감사드립니다!서비스 레이어 내에서 템플릿에 함수 바인딩하기

LoginService

import { Injectable } from '@angular/core'; 

@Injectable() 
export class LoginService { 
    constructor() { 
     console.log('constructor logic'); 
    } 

    checkLoginStatus() { 
     console.log('login logic'); 
    } 

    logout() { 
     console.log('logout logic'); 
    } 
} 

LoginComponent

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'page-login', 
    templateUrl: 'login.html', 
    providers: [LoginService] 
}) 
export class LoginPage { 

    constructor(loginService : LoginService) { 

    } 

} 

템플릿 파일

<button class="login-button" on-tap="loginService.checkLoginStatus()"> 
    Log In 
</button> 
<button class="login-button" on-tap="loginService.logout()"> 
    Log Out 
</button> 
+1

또한 LoginService에'@Injectable()'데코레이터를 잘못 입력 한 것처럼 보입니다 - 나는';'와'@'없이 작동 할 것이라고 생각하지 않습니다 – artem

+0

good call1;))) – AnchovyLegend

답변

2

당신은 생성자에서 서비스를 액세스 한정자를 줄 필요가, 그렇지 않으면 그것은 단지로 범위가 생성자

// constructor(loginService : LoginService) 
constructor(public loginService : LoginService) 
+0

하, 그게 그냥 환상적입니다, 도움을 주셔서 감사합니다 : angle2에 대한 기본 액세스 한정자가 지정되지 않았을 때 무엇입니까? 그건 사적인거야? – AnchovyLegend

+0

"단지 생성자"라고 추측합니다. 심지어 이름이 있다면 나는 그것이 무엇인지 불렀다. private 수정 자조차도 템플릿에 대한 액세스 권한을 부여하므로 분명히 'private'가 아닙니다. JS에 액세스 수정 자 같은 것이 없다는 것을 기억하십시오. 따라서 TypeScript가 컴파일 될 때 modfier는 없어집니다. 따라서 템플릿은 여전히 ​​개인 변수 –

+0

에 액세스 할 수 있습니다. 템플릿이 여전히 개인 변수에 액세스 할 수 있다는 것은 무엇을 의미합니까? 그때 비공개로 만드는 것은 무엇입니까? – AnchovyLegend

관련 문제