2

我正在使用 Twitter Bootstrap 开发 AngularJS 网络应用程序。模板和控制器运行两次。我不知道他们为什么这样做。

下面是 index.html 文件中的一些代码:

<html data-ng-app="app" ng-controller="AppCtrl">    
<div class="container ng-view" data-ng-view></div>

...

<script>
(function (angular) {
"use strict"; // jshint ;_;
// http://coenraets.org/blog/2012/02/sample-application-with-angular-js/
angular.module('app', ['filters', 'angular', 'currency'])
.config(function($routeProvider) {
    var _view_ = 'view/';
    $routeProvider.
        when('/app',                {templateUrl:_view_+'app/index.html',       }).
        when('/account/settings',   {templateUrl:_view_+'app/settings.html',    }).
        when('/profile/:profile_ID', {templateUrl:_view_+'app/profile.html',    controller:ProfilePageCtrl}).
        when('/discuss',            {templateUrl:_view_+'discuss/discuss.html',     controller:DiscussCtrl}).
        when('/',                   {templateUrl:_view_+'page/home.html'        }).
        when('/:page',              {templateUrl:_view_+'page.html',            controller:PageCtrl}).
        otherwise({redirectTo:'/'});
})
...

有人可以提供建议吗?模板和控制器是否应该运行两次?

2012-12-04 更新:我发现模板运行了两次,不管它们是否有控制器。如果模板有控制器,控制器也会运行两次。

4

2 回答 2

6

代替

<div class="container ng-view" data-ng-view></div>

<div class="container ng-view"></div>
于 2012-12-05T14:51:31.413 回答
2

我遇到了类似的问题:我的控制器被调用了两次,我只是在 中声明它们$routeProvider,根本没有使用ng-controller。事实证明,我正在使用以下方式链接到页面:

<a href='#somepage'>

代替

<a href='#/somepage'>

当我重写我的链接以#/在一开始使用时,它起作用了。我猜 Angular 是“重定向”#somepage#/somepage,但两次都调用了控制器。

我看到您已经#/在链接的开头使用了,但<base href="/ ">顶部也有一个(并且那里也有一个尾随空格)。也许这会让 Angular 感到困惑,它会触发一些不希望的重定向?

于 2013-01-28T12:54:27.107 回答