2017-09-27 4 views
1

현재이 repos 인증 https://github.com/codediodeio/angular-firestarter을 학습 중입니다. 이 저자는 사용자 등록 및 징후에 사용자 데이터를 매번 업데이트하려면이 방법을 사용 REPO의angularfire2 : 파괴적인 업데이트 (집합())와 비파괴적인 업데이트 (업데이트())의 차이점

이 조각은 인증 서비스, 실시간 DB에 사용자 이름과 이메일을 씁니다.

//// Helpers //// 

    private updateUserData(): void { 
    // Writes user name and email to realtime db 
    // useful if your app displays information about users or for admin features 

    const path = `users/${this.currentUserId}`; // Endpoint on firebase 
    const data = { 
     email: this.authState.email, 
     name: this.authState.displayName 
    } 

    this.db.object(path).update(data) 
     .catch(error => console.log(error)); 

    } 

을 내 옆에서 프로젝트 내가 현재 작업하고있는 프로젝트는 firebase에 사용자 세부 정보를 쓰는 위의 스 니펫을 사용하고 등록시 사용자 세부 정보 (전자 메일과 패스가 아님)를 사용합니다. 레 폿에서는 snippet을 사용하여 로그인 정보를 업데이트하고 레지스터.

this.db.object(path).update(data) 

의 라인에서

I 모두 두 가지 방법이있다 https://github.com/angular/angularfire2/blob/master/docs/2-retrieving-data-as-objects.md#api-summary 워드 프로세서이 .update()set(), 그것은 .update()비파괴 갱신set() 파괴 갱신이라는 문서에 말한다 . 나는이 두 가지를 시도해 보았고 다른 것과 똑같이 작동했습니다.

위의 설명에서 내가 등록한 경우에만 스 니펫을 사용합니다. set() 또는 update()을 사용해야합니까? 은 무엇입니까?비파괴 업데이트, 링크는 이러한 큰 도움이 무엇인지 설명합니다.

답변

2

모든 프레임 워크/도구가이 두 가지 동작에 대해 동일한 로직을 사용한다는 사실을 확인했습니다. 따라서 은 개체를 파괴하고 새 값을 할당하는 반면 update()은 정의 된 속성 만 업데이트합니다. 당신이 car.set(color = "blue") 같은 것을 실행하면

car 
color: "red", 
engine: "v6" 

, 객체가된다 :

car 
color: "blue", 
engine: "v6" 

그리고 :

car 
color: "blue", 
engine: undefined 

그리고 update(color = "blue")을하고주는 그래서

, 당신은 DB에 객체가 있다고 가정 해 왜 프리미티브에 update()을 사용할 수 없는지 설명합니다. ey에는 속성이 하나뿐이므로 어쨌든 재설정됩니다.