コンポーネントのプロパティを使用して、HTML要素の状態を動的に変更することはできません。角2:サービスを介してテンプレートの変数を正しく変更する方法は?
@Component({
selector: 'home-page',
templateUrl: 'home.component.html',
styleUrls:['home.component.scss'],
providers:[AuthService]
})
export class HomeComponent implements OnInit {
public isAuth: boolean;
constructor(private auth: AuthService) {
ngOnInit() {
this.isAuth = this.auth.temp;
console.log(this.isAuth);
}
}
私のAuthServiceはここにある:私はボタンをクリックしたときに
@Injectable()
export class AuthService {
public activeUser:ReplaySubject<any> = new ReplaySubject();
dataBoolean$ = this.activeUser.asObservable();
set signIn(val: boolean) {
console.log("sign-in");
Observable.of(val).subscribe
(
res => {
this.activeUser.next(res);
console.log("SIGNIN >>>>> ", res);
this.temp = res;
}
);
console.log("temp", this.temp);
}
}
OKは、サインイン()のコードは正常に動作します。私はサービスからのコンソールの出力を参照して、コンポーネントから。
しかし、私のテンプレートで、私はこれを持っている:<button [disabled]="isAuth">Pull</button>
私が観測は、新しい価値を発するとき、私はすぐにテンプレートに表示されなければならない部品やコンポーネントの新しいプロパティでこれを取得することを検討してください。でも、この方法で
:
setInterval(() => {
this.isAuth = !this.isAuth;
console.log(this.isAuth);
}, 2000);
ボタンは、彼女の状態を変更することはできません。
しかし、それは真実ではないか、私は何か間違っています。
が割り当てられます。代わりにサービスプロパティからデータをバインドする必要があると思います。 '
これを確認するために、私が追加した たsetInterval(()=> { this.isAuth = this.isAuth;! にconsole.log(this.isAuth); }、2000); 私のボタンは状態を変えません。 –
奇妙に見えます。あなたはプランナーの問題を再現できますか? – estus