2016-07-07 93 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指令以及...请检查