内容: 为什么tab()被多次调用?
详情:
我正在审查spring.io的教程。
[http://spring.io/guides/tutorials/spring-security-and-angular-js/]
它有可用的示例代码。在该代码中,有一个AngularJS部分如下所示:
<li ng-class="active:tab('home')"><a href="#/">home</a></li>
<li><a href="login">login</a></li>
<li ng-show="authenticated"><a href="" ...>logout</a></li>
...
<div ng-view class="container"></div>
tab()在Javascript文件中解析:
$scope.tab = function(route) {
return $route.current && route === route.current.controller;
}
换句话说,如果“home”是活动视图(home.html和home控制器),那么使Bootstrap类“active:true”。
“家庭”控制器有这个:
.controller("home", function($scope, $http) {
$http.get('resource/').success(function(data) {
$scope.greeting = data;
})
});
home.html是:
<h1>Greeting</h1>
<div ng-show="authenticated">
<p>The ID is {{greeting.id}}</p>
<p>The content is {{greeting.content}}</p>
</div>
<div ng-show="!authenticated">
<p>Login to see your greeting</p>
</div>
首次加载页面时,.config()将“home”作为当前提供者,将“home.html”作为templateUrl。文件已加载但视图(用于存储home.html)尚未加载。我看到tab()调用: 一旦菜单加载(主页,登录,注销)并显示。 再过两次后,退出菜单的选择就消失了(取决于经过身份验证,我们不是)。显示完整的home.html:
home login
Greeting
The ID is {{greeting.id}}
The content is {{greeting.content}}
Login to see your greeting.
现在调用资源(由于身份验证原因,它将失败),但不会调用success()。
再次调用Tab(),之后{{greeting.id}}和{{greeting.content}} diasappear(替换为空格)。
现在tab()被再调用六次,之后完成AngularJS事件。
根据我的推算,tab()应该只被调用一次,因为它引用了一个锚链接。然而,似乎AngularJS对index.html和home.html所做的一切都要求。
有人可以解释为什么AngularJS喜欢调用tab()这么多吗?