我有没有办法观察UI中的状态变化?
例如,在我的数据组件中,我有一个名为loggedIn
的变量。如果loggedIn
的值等于false,我希望我的标题显示Login
链接。同样,如果loggedIn
的值等于true,我希望我的标题显示Logout
链接。到目前为止,我已经尝试过:
<li v-if="loggedIn"><a v-link="{ path: 'login' }" v-on:click="logout()">Logout</a></li>
<li v-else><a v-link="{ path: 'login' }">Login</a></li>
data: function () {
return {
loggedIn: this.isLoggedIn() //this method returns true/false
}
},
原样的代码具有所需的效果。但是,它仅在我的组件刷新时才有效。我希望Login/Logout
在loggedIn
的值发生变化时进行相应的渲染...有人可以帮忙吗?
提前致谢!
答案 0 :(得分:1)
更新我刚才意识到this.isLoggedIn
是您组件中的一种方法,而不是在其外部。看起来你应该isLoggedIn
一个computed
并在你的指令中使用它。
是的,你可以在UI中观察状态变化,但Vue不能。 Vue不知道整个UI存在。它只知道你告诉它的部分(通常是通过指令)。
在您的示例代码中,您将loggedIn
初始化为函数的输出,但在初始化之后,其值永远不会更改。对于ViewModel之外的内容,没有$watch
。
据推测,存在一些UI状态发生变化的登录过程。由于ViewModel的目的是为应用程序建模,因此您应该实现它
登录过程为ViewModel中的method
。它将做的事情之一是改变loggedIn
变量的值。作为一般规则,UI状态应由data
成员表示,任何更改UI状态的内容都应实现为method
。
可能是从此组件向父树发生登录。在这种情况下,loggedIn
应该是prop
。