脚本在主控制器中触发两次

时间:2015-11-09 07:18:34

标签: javascript angularjs twitter-bootstrap

我正在尝试在我的AngularJS应用中实现KonamiJS,当用户点击键盘上的Konami代码时,该应用会打开BootstrapUI模式对话框。脚本正常工作,但它已经发射两次,我似乎无法弄清楚原因。这是我在主控制器中包含的所有内容,因此它可以从任何地方触发。在主控制器中,我还有一个Angular视图:

<body ng-app="App" ng-controller="MainCtrl">
  <div id="main-content" ng-view="" class="content"></div>
</body>


angular.module('App')
  .controller('MainCtrl', function ($scope, $modal, $log) {

      $scope.animationsEnabled = true;
      var credits_page = new Konami();

      credits_page.code = function() {
         $modal.open({
           animation: $scope.animationsEnabled,
           templateUrl: 'views/credits.html',
           controller: 'ModalInstanceCtrl'
         });

         console.log("Trigger");
      }

      credits_page.load();
});

然后我有一个模态控制器,它与之对话:

  angular.module('App')
    .controller('ModalInstanceCtrl', function ($scope, $modalInstance) {

      $scope.ok = function () {
            $modalInstance.close($scope.selected.item);
          };

      $scope.cancel = function () {
            $modalInstance.dismiss('cancel');
          };
    });

这里只是我的脚本加载顺序:

    <script src="scripts/app.js"></script>
    <script src="scripts/controllers/main.js"></script>
    <script src="scripts/controllers/modal.js"></script>
    <script src="scripts/controllers/carousel.js"></script>
    <script src="scripts/controllers/contact.js"></script>
    <script src="scripts/particles.js"></script>
    <script src="scripts/konami.js"></script>

我认为它与视图开关有关,但我无法确定究竟是什么导致它。

2 个答案:

答案 0 :(得分:2)

你必须在MainCtrl定义中提及ng-controller="MainCtrl",所以基本上你的MainCtrl控制器正在进行两次注册。

您需要从body标签中删除{{1}},这在实例化{{1}}两次时基本上似乎是多余的。

答案 1 :(得分:0)

检查您的模板和路线,您可能已经声明控制器两次

模板中的

ng-controller =&#34; MainCtrl&#34;

路线:控制器:&#39; MainCtrl&#39;