2016-07-07 83 views
2

在html文件templates\events.html中有以下代碼。爲什麼控制器中的代碼被調用兩次?

<div class="events-2colmn-l backgnd-cover" ui-sref="menu.music"> 
    MUSIC 
</div> 

在route.js

.state('menu.music', { 
    url: '/music', 
    views: { 
     'side-menu21': { 
     templateUrl: 'templates/music.html', 
     controller: 'musicCtrl' 
     } 
    } 
    }) 

和Controller有當<div ...>MUSIC</div>被觸摸

.controller('musicCtrl', function ($scope, EventService) { // called twice when clicked 
    var allEvents = EventService.query({ category: "Music" }); 
    allEvents.$promise.then(function (response) { 
     $scope.events = response; 
    }); 
}) 

控制器中的代碼總是調用兩次。如何確保點擊時只調用一次?

+0

這是否發生在您的應用程序的其他部分?只需確保將某些日誌或斷點放置在其他控制器中即可。 –

+1

在你的整個應用程序中搜索'musicCtrl',並確保你沒有像ng-controller那樣的重複控制器在我搜索的events.html – Srijith

+0

@Srijith上,並且只有一個'musicCtrl'控制器,一個模板music.html文件有'ng-controller =「musicCtrl」' – ca9163d9

回答

2

您應該通過ng-controller或app.js中的狀態將控制器與html關聯。

所以,當你有你的狀態,這樣

.state('menu.music', { 
url: '/music', 
views: { 
    'side-menu21': { 
    templateUrl: 'templates/music.html', 
    controller: 'musicCtrl' 
    } 
    } 
}) 

你不需要在你的music.html的NG-控制器。那是什麼導致控制器被調用兩次。嘗試刪除NG-控制器和驗證

+0

非常感謝。順便說一句,哪種方式更好的做法? (route vs ng-controller) – ca9163d9

+0

我通常在html中擁有它們,所以人們知道在html中使用哪個控制器,而不必檢查路由,但是它是個人偏好。不知道爲什麼會選擇其中的任何原因。 – Srijith

3

這是因爲你的控制器被調用兩次......

  • 一旦當你調用

  • 了第二遍時,模板/音樂.html被調用是因爲您必須在music.html中使用ng-controller指令以及...請檢查

相關問題