Javascript 视图未更新离子2和角度2中的变量变化

Javascript 视图未更新离子2和角度2中的变量变化,javascript,angular,model-view-controller,ionic2,ionic2-providers,Javascript,Angular,Model View Controller,Ionic2,Ionic2 Providers,我对使用Angular 2还不熟悉,所以我可能只是不明白出了什么问题。但是,我有一个*ngIf,它应该在变量为false时显示按钮,而在变量为true时不显示按钮 但是,一旦我将变量更新为true,按钮就不会消失。非常感谢您的帮助 代码: HTML 服务: declare var window: any; @Injectable() export class UserSettings { authorizationCode: string; uberData: any; uberSett

我对使用Angular 2还不熟悉,所以我可能只是不明白出了什么问题。但是,我有一个*ngIf,它应该在变量为false时显示按钮,而在变量为true时不显示按钮

但是,一旦我将变量更新为true,按钮就不会消失。非常感谢您的帮助

代码:

HTML

服务:

declare
var window: any;


@Injectable()
export class UserSettings {

authorizationCode: string;
uberData: any;

uberSettings: UberSettings;
result: any;




constructor(public http: Http, private platform: Platform, public storage: Storage) {

    console.log('called uberSettings Constructor');

    storage.ready().then(() => {

        storage.get('uberSettings').then((val) => {

                console.log('the val is' + val);
                if (val == null) {
                    console.log('val equaled null');
                    this.uberSettings = {
                        buttonOn: false,
                        uberActivated: false,
                        token: null,
                        refreshToken: null,
                        long: null,
                        lat: null,
                    }

                    console.log(this.uberSettings);

                    storage.set('uberSettings', this.uberSettings);

                    // this.uberSettings.uberActivated = true; 
                    // // this.uberSettings.token= val.token;
                } else {
                    console.log("there was a value for Val");
                    this.uberSettings = val
                    console.log(this.uberSettings);
                }
            })

            .catch(err => {
                console.log('we dont have an uber token yet' + JSON.stringify(err));
            });


    });




}

public connectUber() {
    this.platform.ready().then(() => {
        this.uberLogin().then(success => {
            this.authorizationCode = success;
            console.log(this.authorizationCode);
            this.token()

        }, (error) => {
            alert(error);
        });
    });
}


token() {

    let headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');

    // let body = 'client_id=3ibytPcye4w3_-0txknyO7ptD-MfFMkn&client_secret=2Kp8O54mGvlOoBm6IPX_0gKBmJ_mODSo7FqPbbA9&redirect_uri=http://localhost:8100/callback&grant_type=authorization_code&code=' + this.authorizationCode

    let urlSearchParams = new URLSearchParams();
    urlSearchParams.append('client_id', <CLIENT ID>);
    urlSearchParams.append('client_secret', <CLIENT SECRET>);
    urlSearchParams.append('redirect_uri', 'http://localhost:8100/callback');
    urlSearchParams.append('grant_type', 'authorization_code');
    urlSearchParams.append('code', this.authorizationCode);
    let body = urlSearchParams.toString()


    return this.http.post(`https://login.uber.com/oauth/v2/token`, body, {
            headers: headers
        })
        .map(response => response.json())
        .subscribe(result => {

            this.result = result
            console.log(this.result);
            this.uberSettings.token = this.result.access_token;
            this.uberSettings.refreshToken = this.result.refresh_token;
            this.uberSettings.uberActivated = true;
            this.uberSettings.buttonOn = true;
            console.log(this.uberSettings);

        });

    public uberLogin(): Promise < any > {
        return new Promise(function(resolve, reject) {
            var browserRef = window.cordova.InAppBrowser.open("https://login.uber.com/oauth/v2/authorize?client_id=3ibytPcye4w3_-0txknyO7ptD-MfFMkn&response_type=code", "_blank", "location=no,clearsessioncache=yes,clearcache=yes");
            browserRef.addEventListener("loadstart", (event) => {
                if ((event.url).indexOf("http://localhost:8100/callback") === 0) {
                    browserRef.removeEventListener("exit", (event) => {});
                    browserRef.close();

                    var responseParameters = ((event.url).split("code="));

                    var parsedResponse = responseParameters[1].split("#");

                    if (parsedResponse[0] !== undefined && parsedResponse[0] !== null) {
                        resolve(parsedResponse[0]);
                    } else {
                        reject("Problem authenticating with Uber");

                    }

                }
            });
            browserRef.addEventListener("exit", function(event) {
                reject("The Uber sign in flow was canceled");
            });
        });
    }

}
声明
var窗口:任意;
@可注射()
导出类用户设置{
授权代码:字符串;
优步数据:任何;
优步设置:优步设置;
结果:有;
构造函数(公共http:http,私有平台:平台,公共存储:存储){
log('称为uberSettings构造函数');
storage.ready()。然后(()=>{
storage.get('uberSettings')。然后((val)=>{
log('val为'+val');
if(val==null){
log('val等于null');
此参数设置={
巴顿农:错,
错误:错误,
令牌:null,
refreshToken:null,
long:null,
lat:null,
}
console.log(this.uberSettings);
storage.set('uberSettings',this.uberSettings);
//this.uberSettings.uberActivated=true;
////this.uberSettings.token=val.token;
}否则{
log(“Val有一个值”);
this.uberSettings=val
console.log(this.uberSettings);
}
})
.catch(错误=>{
log('我们还没有uber令牌'+JSON.stringify(err));
});
});
}
公共连接uber(){
this.platform.ready()。然后(()=>{
this.uberLogin().then(success=>{
this.authorizationCode=成功;
console.log(此.authorizationCode);
this.token()
},(错误)=>{
警报(错误);
});
});
}
代币(){
let headers=新的headers();
headers.append('Content-Type','application/x-www-form-urlencoded');
//let body='client_id=3ibytPcye4w3_-0txknyO7ptD MfFMkn&client_secret=2Kp8O54mGvlOoBm6IPX_0gKBmJ_mODSo7FqPbbA9&重定向_uri=http://localhost:8100/callback&grant_type=authorization_code&code=“+this.authorizationCode
设urlSearchParams=newURLSearchParams();
urlSearchParams.append('client_id',);
urlSearchParams.append('client_secret',);
urlSearchParams.append('redirect_uri','http://localhost:8100/callback');
urlSearchParams.append('grant_type','authorization_code');
urlSearchParams.append('code',this.authorizationCode);
let body=urlSearchParams.toString()
返回this.http.post(`https://login.uber.com/oauth/v2/token`,主体{
标题:标题
})
.map(response=>response.json())
.订阅(结果=>{
this.result=结果
console.log(this.result);
this.uberSettings.token=this.result.access_token;
this.uberSettings.refreshToken=this.result.refresh\u标记;
this.uberSettings.uberActivated=true;
this.uberSettings.buttonOn=true;
console.log(this.uberSettings);
});
公共uberLogin():承诺{
返回新承诺(功能(解决、拒绝){
var browserRef=window.cordova.InAppBrowser.open(“https://login.uber.com/oauth/v2/authorize?client_id=3ibytPcye4w3_-0txknyO7ptD MfFMkn&响应类型=代码“,”空白“,”位置=否,clearsessioncache=是,clearcache=是”);
browserRef.addEventListener(“加载开始”,“事件)=>{
if((event.url).indexOf(“http://localhost:8100/callback") === 0) {
browserRef.removeEventListener(“退出”,(事件)=>{});
browserRef.close();
var responseParameters=((event.url).split(“code=”);
var parsedResponse=响应参数[1]。拆分(“#”);
if(parsedResponse[0]!==undefined&&parsedResponse[0]!==null){
解析(parsedResponse[0]);
}否则{
拒绝(“与优步的身份验证问题”);
}
}
});
browserRef.addEventListener(“退出”,函数(事件){
拒绝(“优步登录流已取消”);
});
});
}
}

因此,如果您查看服务代码,我将在token()时更新this.uberSettings调用,控制台显示this.uberSettings.uberActivated已更改为true。但是,我不明白为什么该按钮仍然显示。如果您能提供任何帮助,我将不胜感激。谢谢!

您的ngIf没有引用您的服务。我想您键入了:)

而不是

*ngIf="!uberSettings?.uberActivated" 

您的ngIf没有引用您的服务。我认为您输入了一个错误:)

而不是

*ngIf="!uberSettings?.uberActivated" 
*ngIf="!userSettings.uberSettings?.uberActivated" 
*ngIf="!uberSettings?.uberActivated"