45

モジュールルート:

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'が2回呼び出されます。私はここで何かが欠けていますか?

4

10 に答える 10

42

私は同じ問題を抱えていましたが、ルーティングに愚かなバグがあるようです。ある種のリダイレクトが行われています。

それを修正するために、次のように href にスラッシュを追加しました。

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

それがあなたにとっても問題を解決することを願っています。

于 2013-01-21T16:42:35.733 に答える
16

同様の問題がありました。リンクではなくルートに末尾のスラッシュを追加すると、期待どおりに機能することがわかりました。

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

このマークアップで

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

そして、AngularJS はブラウザーの URL を $routeProvider で定義されているものに修正します。

奇妙なことに、ルートではなくリンクの末尾のスラッシュでも反対のことが機能するようです。末尾のスラッシュが解決と一致せず、コントローラーが2回呼び出されない限り、そうです!

于 2013-06-07T15:29:00.613 に答える
8

ng-controllerディレクティブが存在する場合は、テンプレート ページから削除します。

于 2015-10-25T10:22:40.437 に答える
2

私は同じ問題を抱えていて、angular を 2 回ブートストラップすると、同じエラーが発生する可能性があることがわかりました。

私の場合、私は持っていまし<body ng-app>たがangular.bootstrap(document,['app'])、それによりコントローラーの二重初期化が発生しました。

これが誰かの時間を節約できることを願っています。

于 2014-03-27T22:57:14.983 に答える
1

コントローラーは DOM の複数の要素に追加できるため、これが行われた場合にこの問題が発生する可能性があります。

  <div id="myDiv1" ng-controller="myController" ....></div>
  ....
  <div id="myDiv2" ng-controller="myController" ....></div>
于 2017-09-15T06:23:04.790 に答える