AngularJS がコントローラーを 2 回実行するのに対処する 質問する

AngularJS がコントローラーを 2 回実行するのに対処する 質問する

$watchAngularJS は、イベントやモデルの状態の継続的なチェックなど、一部のコードを 2 回、場合によってはそれ以上実行することを理解しています。

しかし私のコード:

function MyController($scope, User, local) {

var $scope.User = local.get(); // Get locally save user data

User.get({ id: $scope.User._id.$oid }, function(user) {
  $scope.User = new User(user);
  local.save($scope.User);
});

//...

2 回実行され、DB に 2 つのレコードが挿入されます。私は長い間この問題に頭を悩ませてきたので、明らかにまだ学習中です。

ベストアンサー1

アプリ ルーターはナビゲーションをMyController次のように指定しました。

$routeProvider.when('/',
                   { templateUrl: 'pages/home.html',
                     controller: MyController });

しかし、私はこれも持っていましたhome.html

<div data-ng-controller="MyController">

これにより、コントローラが 2 回ダイジェストされました。HTMLdata-ng-controllerから属性を削除すると、問題は解決しました。または、controller:ルーティング ディレクティブからプロパティを削除することもできます。

この問題は、タブ ナビゲーションを使用する場合にも発生します。たとえば、次のような内容app.jsが含まれる場合があります。

  .state('tab.reports', {
    url: '/reports',
    views: {
      'tab-reports': {
        templateUrl: 'templates/tab-reports.html',
        controller: 'ReportsCtrl'
      }
    }
  })

対応するレポート タブの HTML は次のようになります。

<ion-view view-title="Reports">
  <ion-content ng-controller="ReportsCtrl">

これにより、コントローラーも 2 回実行されることになります。

おすすめ記事