Я бился головой о стену, пытаясь понять, как controller as
и Promises работают вместе с AngularJS.Похоже, что, завернув результат в обещание, AngularJS не увидит обновления контроллера, пока вы не запустите другое изменение.
HTML:
<body ng-app="MainModule" ng-controller="MainController as main">
<div class="bar bar-header bar-calm">
<h1 class="title">Test Bench</h1>
</div>
<div class="app">
<h1>Test Bench</h1>
<div class="text-center">
<p>Last Fingerprint Result: {{main.lastAuthSuccessful}}</p>
</div>
.....
</body>
Рассматриваемый метод контроллера:
doFingerprint() {
this.auth
.fingerprint()
.then(success => {
console.log(this, self, this.self);
this.lastAuthSuccessful = success;
})
.catch(error => {
console.error(error);
return false;
});
}
И метод идентификации в сервисе аутентификации:
fingerprint(): Promise<boolean> {
if (!this.finger) return Promise.reject("Fingerprint API not yet loaded.");
return new Promise((resolve, reject) => {
this.finger.show(
{
clientId: "Fingerprint-Demo",
clientSecret: "password"
},
() => {
resolve(true);
},
err => {
resolve(false);
}
);
});
}
Это выглядит довольно просто, но обновленное lastAuthSuccessful
из обещания отказывается обновлять представление, пока вы не попытаетесь вызватьметод снова.