AngularJS ng-class函数多次调用

时间:2015-10-28 17:18:21

标签: javascript angularjs

内容: 为什么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()这么多吗?

0 个答案:

没有答案