angularjs - 强制重新评估 ng-if

标签 angularjs

我的应用程序上有一个标题,其中包含“登录”/“创建帐户”选项。当用户登录时,我需要上述替换“退出”选项。

但是,当用户登录时,ui-view 会按预期更改但不更改标题,这是可以理解的,因为它不是 ui-view 的一部分。到目前为止,这是我的代码:

<ul id="nav-account">
    <li>{{mainCtrl.isAuthenticated ? 'Welcome ' + user.firstname + '!'</li>
    <li ng-if="!isAuthenticated"><a ng-href="{{'HEADER_NAVTABS_SIGNIN'| externallinks}}">Sign In</a> or <a ng-href="{{'HEADER_NAVTABS_CREATE_ACCOUNT'| externallinks}}">Create Account</a></li>
    <li ng-if="isAuthenticated"><a ui-sref="logout">Sign Out</a><li>
</ul>

在我的 Controller 中,我正在设置 的值已认证 通过调用服务:
 $scope.isAuthenticated = memberService.isAuthenticated();

标题值会改变的唯一方法是如果我刷新整个页面 - 为什么会这样? ng-if 不应该重新评估变量并相应地更新 View 吗?

这是否意味着 ng-if 仅以一种方式绑定(bind)?那么我能做些什么来完成这项工作呢?

谢谢

安德鲁

最佳答案

您的 Controller 代码仅在关联模板的加载时间被调用。这意味着变量 不会再影响 之后。

但是,数据绑定(bind)在任何地方都有效,包括 if ngIf .要使用它并根据前面的解释,我建议您使用两个简单而干净的解决方案:

1. 绑定(bind)功能 (或服务)在您的 Controller 范围内:

Angular :

$scope.isAuthenticated = memberService.isAuthenticated;

部分的:
<li>{{isAuthenticated() ? 'Welcome ' + user.firstname + '!'}}</li>

注意括号的使用:这将使 Angular 评估isAuthenticated()在每个摘要循环中。

-

2. 绑定(bind)认证对象 在您可以由服务修改的范围内:

Angular :
$scope.auth = memberService.authenticationData;

部分的:
<li>{{auth.isAuthenticated ? 'Welcome ' + user.firstname + '!'}}</li>

-

此外,就像@Govan 建议的那样,您应该更喜欢 ngShow 这样的指令而不是手动 JS 测试:
<li ng-show="auth.isAuthenticated">Welcome {{user.firstname}}!</li>

关于angularjs - 强制重新评估 ng-if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27741655/

相关文章:

javascript - Angular ui-grid 保存来自不同范围对象的预填充值

javascript - 未捕获错误 : Bootstrap's JavaScript requires jQuery version 1. 12.4 或更高版本,但低于日期时间选择器中的版本 3

php - 来自 MySQL DB 的 AngularJS 值

angularjs - Web API 仅日期 UTC 转换

javascript - Angular JS : binding in ng-show not working

javascript - 如何在 Eclipse 中测试和创建 angularjs 的测试用例?

javascript - 在 AngularJS 中定义服务和工厂的正确方法

javascript - 如何将链接的id传递给angularJS Controller ?

javascript - 获取完整的 JSON 请求 URL 以进行故障排除

javascript - Angular.js 教程使用 Protractor 运行端到端测试