Nativescript应用程序设置以保持JSON值

时间:2017-03-08 22:33:28

标签: json angular nativescript

我是nativescript和angular 2开发的新手。目前,在我构建的应用程序中,HTTP post返回一个JSON对象,如

    [
  {
    "firstname": "test",
    "isauth": true,
    "lastname": "client",
    "roleid": 10,
    "rolename": "",
    "userid": 3507,
    "username": ""
  }
]

我需要以某种方式保存来自login.component.ts中上述响应的userid(由Backendservice.apiUrl返回)值,并使用它传递给我的另一个API(Backendservice.requesturl)。将从另一个组件调用(调用clientmaster.component.ts)。我如何在{N} + angular2。

上执行此操作

我可以使用applicationsettings setstring来保存userid值并在我进行下一次调用时使用它吗?如果可能的话,我如何从observable解析JSON响应并保存userid值?

我知道我可以使用flatmap来制作链式http请求。但是我不太确定如何做到这一点,而且我对角度2开发和RxJs可观察概念都很陌生。

这是我的代码: 的 login.service.ts

login(user: User) {
    let headers = new Headers();
    //In the headers object, the Content-Type specifies that the body represents JSON.
    headers.append("Content-Type", "application/json");
    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('username', user.username);
    urlSearchParams.append('pwd', user.password);
    let body = urlSearchParams.toString();
    console.log("body"+body);

    return this.http.post(
     BackendService.apiUrl,
     body,
    {headers: headers })
    .map((response ) => { 
                response.json();
                // login successful if there's a jwt token in the response
                console.log("RESPONSE: "+response.url);    
                console.log("response json "+response.status);
                var body = response.json();
                console.log("JSON BODY: ",JSON.stringify(body));

              }
                )


    .catch(this.handleErrors);
  }

getAssociatedRequest(){
let headers = new Headers();
    //call made to the next URL
    return this.http.get(
     BackendService.requestUrl
  )
    .map((response: Response) => { 
                // login successful if there's a jwt token in the response
                console.log("RESPONSE: ",response);
                var body = response.json();
                console.log("JSON BODY: ",JSON.stringify(body));
               alert(JSON.stringify(body));}
                )

    .catch(this.handleErrors);
  }

  logoff() {
    BackendService.token = "";
  }



  handleErrors(error: Response) {
    console.log(JSON.stringify(error.json()));
    return Observable.throw(error);
  }
}

login.component.ts

import { Component, ElementRef, OnInit, ViewChild } from "@angular/core";
.....
.....


@Component({
  selector: "vp-login",
  moduleId: module.id,
  providers: [LoginService],
  templateUrl: "./login.component.html",
  styleUrls: ["./login.component.css", "./login.css"],
})



export class LoginComponent implements OnInit {
  user: User;
  isAuthenticating = false;

  constructor(private router: Router,
    private loginService : LoginService,
    private page: Page) {
    this.user = new User();
  }

   ngOnInit() {
    this.page.actionBarHidden = true;
  }


  login() {

      if (getConnectionType() === connectionType.none) {
        alert("Vessel-Pro requires an internet connection to log in.");
        return;
         }

     try {
      this.loginService.login(this.user)
      .subscribe(

        () => {

           this.isAuthenticating = false;
           this.router.navigate(["/clientMaster"]);
         },
        (error) => {
          alert("Unfortunately we could not find your account.");
          this.isAuthenticating = false;

        }


    );

    } catch (error) {
      console.log(error.message);
    }
   }
}

clientmaster.component.ts

import { Component, ElementRef, OnInit, ViewChild } from "@angular/core";
import { alert, LoginService, User } from "../shared";
...


@Component({
  selector: "clientMaster",
  moduleId: module.id,
  templateUrl: './clientmaster.component.html',
  styleUrls: ["./clientmaster.component.css"],
  providers: [LoginService]
})
 export class ClientMasterComponent implements OnInit{

  isLoading = false;

   constructor(private router: Router,
   private LoginService: LoginService,
   private page: Page) {}

   ngOnInit(){
     this.page.actionBarHidden = true;
   }



/**
 * gotoSRTPage
 */
public gotoSRTPage() {
  this.router.navigate(["srtDetails"])
}
loadsrt(){
 // alert("OK");
    if (getConnectionType() === connectionType.none) {
        alert("Oops!! looks like your device is not connected to the internet ");
        return;
      }

        this.LoginService.getAssociatedRequest()
        .subscribe(
          (response) => { 
        console.log("Success Response" + response)

        },

        (error) => { console.log("Error happened", error.message)},
        () => { console.log("srt is completed")
       }
    );

0 个答案:

没有答案