如何根据AngularJS中的http结果生成不同的html内容
How to generate different html content depending on http results in AngularJS?
当我的页面加载时,我想对服务器进行http调用,看看用户的登录会话是否仍然有效。客户端将发送一个带有当前时间戳的会话密钥,服务器将比较该时间戳以查看它是否长于指定的超时时间。然后服务器将返回true或false。
如果http调用返回true并且登录有效,我想生成这个html:
<li><a href='#logout'>logout</a></li>
如果调用返回false并且登录已过期,我想显示以下内容:
<li><a href='#login'>login</a></li>
我不知道如何使用AngularJS来做到这一点。
Angular有内置的条件渲染指令:
ng-show
/ng-hide
:有条件设置display: none
样式(带.ng-hide
类)
ng-if
/ng-switch
:有条件地添加/删除DOM元素。
无论哪种方法都适用。例如:
<li ng-switch="isLoggedIn">
<a ng-switch-when="true" href='#logout'>logout</a>
<a ng-switch-when="false" href='#login'>login</a>
</li>
无论何时完成HTTP调用,都可以设置isLoggedIn
。
创建控制器
angular.module('yourModuleName').controller('sessionCtrl', ['$scope', '$http', function($scope, $http){
$http.get('url')
.success(function(data){
$scope.loggedIn = data ? '#logout' : '#login'; //true or false
})
}]);
然后在你的标记
<div ng-controller="sessionCtrl">
<li ng-show="loggedIn"><a href='{{loggedIn}}'>logout</a></li>
</div>
编辑:您可以使用ng if/ng开关而不是ng show来优化性能,因为这实际上会删除dom对象,而不是隐藏它。但是,在您的情况下,这应该不会太重要。此外,请记住,如果您使用的是1.2以下的版本,则可能无法访问ng-if。ng开关也有些冗长。
相关文章:
- 重新排列HTML元素的顺序并更改内容
- 用HTML在不同屏幕上显示和隐藏内容的方法
- 如何根据html内容使用ng类-AngularJS
- 如何使用JavaScript访问HTML链接内容
- HTML 5 和 3.js 代码不会在网页上显示任何内容
- 如何将html元素添加为生成的内容
- 防止“;jQuery(html)"防止触发浏览器请求图像和其他参考内容
- JavaScript在其他页面上用html内容填充文本框
- 如何在带有nunjucks和gullow数据的JSON数据中使用带有HTML的内容
- Rails:如何在浏览器中显示动态html内容,而不会对其进行转义,也不会引起XSS攻击
- HTML表内容:如果行很长,如何在新行中显示部分内容
- 使用javascript动态创建html内容/元素
- 无法将大型html内容POST到Chrome上的服务器
- VBA正在抓取不在HTML源文件中的生成内容
- 将内容ajax加载到html弹出窗口中
- 从按钮中选择内容 (html),但不是每个内容
- $.get() 方法 JQuery 不读取任何内容 (html)
- 跨页面的多个内容 (html)
- 可以通过Fancytree中的AJAX加载多行内容/html/ish内容
- 如何从mysql插入数据后,从数据库添加一个内容HTML没有刷新php