2012-12-03 59 views
2

我正在使用Twitter Bootstrap處理AngularJS Web應用程序。模板和控制器運行兩次。我不知道他們爲什麼這樣做。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更新:我發現模板運行了兩次,不管是否有控制器。如果模板具有控制器,則控制器也運行兩次。

+0

你能否提供一個http://plnkr.co/?它很難通過閱讀來理解代碼。 – Max

+0

另外,確保你沒有使用'ngController'指令從你的任何模板中聲明相同的控制器。 – jaime

+0

@Max我添加到plnkr.co,但我不知道如果我做對了。你可以在這裏看到它:http://plnkr.co/edit/z6ylRIpcNAFZF8xMxgDB jm:我檢查了,我不認爲我是從任何其他模板聲明相同的控制器,你可以在我上面的代碼中看到。 – Curt

回答

6

更換

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

<div class="container ng-view"></div> 
+0

是的!謝謝你,先生。 – bitwit

2

我有一個類似的問題:我的控制器都被調用兩次,我只是宣佈他們在$routeProvider,不使用ng-controller可言。事實證明,我是用鏈接到網頁:的

<a href='#somepage'> 

代替

<a href='#/somepage'> 

當我改寫了我的鏈接使用​​在一開始,它的工作。我猜Angular是「重定向」#somepage#/somepage,但是兩次調用控制器。

我看到您已在鏈接開始時使用​​,但頂部也有<base href="/ ">(此處也有尾隨空格)。也許這是令人困惑的Angular,它引發了一些不受歡迎的重定向?

+0

感謝這個答案,我有完全相同的問題,我使用$ routeChangeStart,它被稱爲兩次,所以謝謝你的回答,它幫助我解決我的問題! –

+0

感謝您的回答。這是我面對的確切問題。在改變之後工作。 Upvoting :) – AdityaSaxena