wake-up-neo.com

AngularJs: Controller wird zweimal mit $ routeProvider aufgerufen

Modulrouten:

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

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

Regler:

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

Jedes Mal, wenn ich auf den Hyperlink '' klicke, wird der 'BuildInfoController' zweimal aufgerufen. Fehlt mir hier etwas?

43
Howard

Ich hatte das gleiche Problem und es scheint, dass es einen dummen Fehler beim Routing gibt. Es ist eine Art Umleitung im Gange.

um es zu beheben, habe ich nur einen Schrägstrich in der Href hinzugefügt, wie:

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

Ich hoffe, es wird auch für Sie etwas reparieren.

43
mpm

Ich hatte heute das gleiche Problem. Ich hatte Controller-Namen in meinem $ routeProvider und auch in meiner HTML-Datei hinzugefügt.

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

und aus meiner Sicht als

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

Sie können den Controller-Namen entweder aus Ihrer Ansicht oder aus Ihrem Routenanbieter entfernen.

70
dip

Ich hatte ein ähnliches Problem. Das Hinzufügen eines nachstehenden Schrägstrichs in der Route, aber nicht im Link, funktionierte wie erwartet.

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

Mit diesem Markup

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

Und dann korrigiert AngularJS die URL im Browser auf das, was im $ routeProvider definiert ist.

Bizarrerweise scheint das Gegenteil auch mit einem nachgestellten Schrägstrich im Link und nicht in der Route zu funktionieren. Es scheint, solange die nachgestellten Schrägstriche Don't die Auflösungen übereinstimmen und der Controller nicht zweimal aufgerufen wird!

15
Dan

Bei mir handelte es sich um 2 ng-view-Direktiven. Ich habe versucht, es einzuwickeln, habe es jedoch unbeabsichtigt kopiert:

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

Wrapper entfernt, repariert.

8
Josh Ribakoff

Entfernen Sie die ng-controller-Direktive von Ihren Vorlagenseiten, falls vorhanden.

8
Sarath

Ich hatte dasselbe Problem und fand heraus, dass, wenn Sie zwei Mal ein Bootstrapping durchgeführt haben, derselbe Fehler auftreten kann.

In meinem Fall hatte ich <body ng-app> aber auch angular.bootstrap(document,['app']) und verursachte eine doppelte Initialisierung der Controller.

Hoffe, das kann jemandem Zeit sparen.

1

Ich hatte auch ein ähnliches Problem mit einer customDirective und duplizierte meinen Controller unionsmäßig.

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

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

         ...

   }
}]);

Ich löste es, indem ich das ng-controller-Tag auf Körperebene entfernte

0

sein, weil Sie mehrere UI-Ansichten haben

0
Muhammad Bilal

Ein Controller kann zu mehr als einem Element des DOM hinzugefügt werden, so dass dieses Problem auftreten kann, wenn dies z. :

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

Ich hatte SomeController für jede Ansicht in einem einzigen Zustand deklariert.

 .state('chat', {
            url: '/',
            views: {
                '[email protected]': {
                    templateUrl: 'views/chat_wv1.html',
                    controller: 'ChatController'
                },
                '[email protected]': {
                    templateUrl: 'views/chat_wv_placeholder.html',
                    controller: 'ViewController'
                },
                '[email protected]': {
                     templateUrl: 'views/sidePanel_wv.html'
                     /* removing this part solved my issue*/
                     /*controller: 'ChatController'*/
                }

            }
        })

Hoffe, das hilft jemand anderem.

0
Beny