Ember.js辛烷和JavaScript(非TS)
我有一个访问会话存储的服务.当我添加或删除特定的键时,我希望我的顶级组件切换导航栏的可见性.我try 了各种不同的跟踪,等等.我试图让一个观察者工作,但坦率地说,我不理解它,我不确定这是否是我需要的.
当存储更新时,然后我手动按F5,应用程序shell 就会看到更改.
当我拨打setAuthenticationToken(value)时,我想让applcaiton-shell注意到这一变化.
我如何才能让应用程序shell 程序自己看到更改?
应用程序-shell .hbs&;.js
{{#if this.isAuthenticated}}
<nav class="mt-8">...</nav>
{{/if}
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking'
import { inject as service } from '@ember/service';
export default class ApplicationShellComponent extends Component {
@service SessionManager
@tracked isAuthenticated = this.SessionManager.isAuthenticated
}
Service.js
const SessionId_Key = 'SIDK'
export default class SessionManagerService extends Service {
@tracked isAuthenticated = this.getAuthenticationToken()
delAuthenticationToken() { this.delItem(SessionId_Key) }
getAuthenticationToken() { return this.getItem(SessionId_Key) }
setAuthenticationToken(value){ this.setItem(SessionId_Key, value) }
delItem(key) { sessionStorage.clear (key) }
getItem(key) { return sessionStorage.getItem(key) }
setItem(key, value) { sessionStorage.setItem(key, value) }
}
已更新答案: 只需在del/set身份验证方法中设置isAuthated就是我所需要的.
delAuthenticationToken() {
this.delItem(SessionId_Key);
this.isAuthenticated = false;
}
setAuthenticationToken(value) {
this.setItem(SessionId_Key, value);
this.isAuthenticated = true;
}