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

Script firing twice in Main Controller

本文关键字:两次 控制器 脚本      更新时间:2023-09-26

我正试图在我的AngularJS应用程序中实现KonamiJS,当用户在键盘上点击Konami代码时,该应用程序会打开BootstrapUI模式对话框。脚本工作,但它已经启动了两次,我似乎不明白为什么。这就是我在主控制器中所拥有的,它将页面上的所有内容打包,以便可以从任何地方触发。在主控制器中,我还有一个角度视图:

<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>

我认为这与视图切换有关,但我无法确定到底是什么原因导致的。

您必须在$routeProvider定义中提到MainCtrl,所以基本上,您的MainCtrl控制器会得到两次注册。

您需要从body标记中删除ng-controller="MainCtrl",这基本上看起来是多余的,因为它实例化了MainCtrl两次。

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

在模板中:ng controller="MainCtrl"

在路由中:控制器:'MainCtrl'