如何在vue.js中观察状态/UI的变化
How to watch for state/UI changes in vue.js
是否有一种方法可以观察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
的值发生变化时相应地渲染…有人能帮忙吗?
提前感谢!
更新我刚刚意识到this.isLoggedIn
是您组件中的方法,而不是在它之外。看起来你应该把isLoggedIn
改成computed
,并在你的指令中使用它。
是的,你可以监视UI中的状态变化,但是Vue不能。我们不知道UI作为一个整体存在。它只知道你告诉它的部分(通常通过指令)。
在您的示例代码中,您将loggedIn
初始化为函数的输出,但是在初始化之后,它的值永远不会改变。对于ViewModel之外的东西没有$watch
。
可以推测,在某个登录过程中UI状态发生了变化。由于ViewModel的目的是对应用程序建模,因此您应该实现它在ViewModel中作为method
登录过程。它将做的事情之一是改变loggedIn
变量的值。作为一般规则,UI状态应该由data
成员表示,任何改变UI状态的操作都应该作为method
来实现。
可能是在这个组件的父树上进行登录。在这种情况下,loggedIn
应该作为prop
出现。
相关文章:
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 使用AngularJS中的UI路由器将状态重定向到默认子状态
- 在UI路由器中以抽象状态填充常见视图
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- 带有嵌套状态的Angular ui路由器和后退按钮
- 如何加载嵌套3个状态的UI路由器UI视图模板
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- ui路由器的惰性加载状态
- Angular JS/UI Router:为给定状态禁用指令
- AngularJS UI路由器未进入默认状态
- Angular UI路由器-检查父状态
- 状态更改期间角度UI路由器中的嵌套视图滞后
- angularjs-ui路由器父状态,参数加载在子状态之后
- Angularjs-ui路由器使用不同的参数进入相同的状态
- AngularJS ui路由器状态结构
- Angularjs:ui路由嵌套状态下的绑定不起作用
- 如何将值与$scope绑定,以从定义状态ui路由器的控制器中使用ng模型进行查看
- 防止命中子状态 ui 路由器
- 从服务器加载 html 和控制器并创建动态状态 UI - 路由器
- 如何在vue.js中观察状态/UI的变化