AngularJs:控制器是通过使用$ routeProvider叫了两声(AngularJs: c

2019-07-18 11:49发布

模块路线:

var switchModule = angular.module('switchModule', []);

switchModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
    when('/build-content', {templateUrl: 'build-content.html', controller: BuildInfoController});
}]);

控制器:

function BuildInfoController($http, $scope){
    alert("hello");
}

HTML:

<html ng-app="switchModule">
...
<body>
    <ul>
        <li><a href="#build-content"/></a></li>
    </ul>
    <div class="ng-view"></div>
</body>
...

每次当我点击超链接'的'BuildInfoController的时间会被调用两次。 我失去了一些东西?

Answer 1:

我有同样的问题,而且似乎没有与路由一个愚蠢的错误。 有某种重定向的事情。

修复它,我只是在href加斜杠,如:

<li><a href="#/build-content/"></a></li>

我希望它会解决的事情,对你来说。



Answer 2:

我今天不得不面对同样的问题。 我曾在我的$ routeProvider并以我的html添加控制器名称。

$routeProvider
    .when('/login', {
            controller: 'LoginController',
            templateUrl: 'html/views/log-in.html'
     })

在我的观点

<div class="personalDetails" ng-controller="LoginController"> </div>

您可以从您的视图或从routeprovider将控制器名。



Answer 3:

我也有过类似的问题。 我发现,在路线中添加斜线但不是在链接工作预期。

$routeProvider.
when('/build-content/',...);

有了这个标记

<li><a href="/build-content">Content</a></li>

然后AngularJS将纠正在浏览器中什么是在$ routeProvider定义的URL。

奇怪的是相反的,似乎与链接,而不是在路线拖尾斜杠工作过。 似乎只要结尾的斜杠匹配的解析和控制器将不会被调用两次!



Answer 4:

矿是具有2 NG-视图指令的情况。 我试图把它包起来,但无意复制它:

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

去除包装,固定它。



Answer 5:

卸下ng-controller是否存在从您的模板页面指令。



Answer 6:

我有同样的问题,结果发现,如果你的自举角两个时间你可以有同样的错误。

在我的情况下,我不得不<body ng-app>而且angular.bootstrap(document,['app'])和导致控制器的双初始化。

希望这可以一定的时间节省的人。



Answer 7:

我不得不SomeController的声明为每个在一个单一的状态下观看的部分。 导致重复的事件触发。

 .state('chat', {
            url: '/',
            views: {
                'content@': {
                    templateUrl: 'views/chat_wv1.html',
                    controller: 'ChatController'
                },
                'form@': {
                    templateUrl: 'views/chat_wv_placeholder.html',
                    controller: 'ViewController'
                },
                'sidePanel@': {
                     templateUrl: 'views/sidePanel_wv.html'
                     /* removing this part solved my issue*/
                     /*controller: 'ChatController'*/
                }

            }
        })

希望这有助于一些其他人。



Answer 8:

我也曾经有过一个customDirective类似的问题和unitentionally复制我的控制器。

<html>
   <body ng-app="MyApp" ng-controller="MyDirectiveCtrl">
      <my-directive></my-directive>
   </body>
</html>

angular.directive('myDirectivie', [function() {
   return {
         restrict: 'E',
         controller: 'MyDirectiveCtrl',

         ...

   }
}]);

我通过在身体层面消除NG控制器标签解决它



Answer 9:

它的,因为你有多个用户界面视图



Answer 10:

控制器可以被添加到DOM的一个以上的元素,因此,如果这已经完成例如,可能会发生这样的问题:

  <div id="myDiv1" ng-controller="myController" ....></div>
  ....
  <div id="myDiv2" ng-controller="myController" ....></div>


Answer 11:

同样在这里我的是具有2 NG-视图指令的情况。

enter code here删除了重复,即NG-来看,固定它。



文章来源: AngularJs: controller is called twice by using $routeProvider