23

私はAngular jsを初めて使用し、現在非常に有線の種類のバグに悩まされています。コントローラーの関数は、ルートに対してロードされたビューによって呼び出されると、2 回実行されます。

http://jsfiddle.net/4gwG3/5/

アラートが2回表示されます!!

私の見解はシンプルです

私のアプリコードは次のとおりです

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

//channel controller
IB.controller('channelsController', function ($scope, $routeParams) {
    $scope.greet = function () {
        alert('hi');
    };
});


IB.config(function ($routeProvider) {
    $routeProvider
    .when('/channels', {
        controller: 'channelsController',
        template: '{{greet()}}'
    })

    .otherwise({ redirectTo: '/channels' });

});
4

4 に答える 4

51

最初に、Angular アプリを 2 回初期化していないことを確認します ( ng-appで自動的に初期化することにより)。

ある時、ng-app を含む 2 つの html ページ (1 つは login.html 用、もう 1 つは main.html 用) があり、これは後で気付いた問題でした。

次に、私にとって最も重要なのは、コントローラーを複数の要素に接続しているかどうかを確認することです。これは、ルーティングを使用している場合によくあるケースです。

私の場合、次のように DashboardController に移動していました。

app.config(function($routeProvider){
    $routeProvider
    .when('/', {
        controller: 'DashboardController',
        templateUrl: 'pages/dashboard.html'
    })
});

しかし、dashboard.html にもこれがありました。

<section class="content" ng-controller="DashboardController">

これは、コントローラーを 2 回消化するように AngularJS に指示していました。

それを解決するには、次の 2 つの方法があります。

次のように、html ファイルからng-controllerを削除します。

<section class="content">

またはルーティングからコントローラーを削除します(通常はapp.jsにあります):

app.config(function($routeProvider){
$routeProvider
        .when('/', {
            templateUrl: 'pages/dashboard.html'
        })
    });
于 2015-02-26T15:28:14.137 に答える
0

ここで何を達成しようとしているのかわかりません。2 つのアラートがあります。 1.controllerが呼び出されたとき。2.templateが評価されるとき。

templateビュー部分を提供することですが、この場合、テンプレートはビューを作成しない関数を評価するだけです。

于 2013-10-26T17:32:49.060 に答える
-1

私は同じ問題を抱えていたので、次のようにしました。

$scope.init=function()
{
    if ($rootScope.shopInit==true) return;
    $rootScope.shopInit=true;
    ...
}
$scope.init();

それがシングルトンであるかのように!(表示するたびにたくさんのajax呼び出しがあり、退屈でした)

于 2013-12-07T16:20:37.043 に答える