1. ホーム
  2. angularjs

[解決済み] AngularJSでコントローラを2回実行する場合の対処法

2022-03-18 22:15:07

質問

AngularJSは、以下のようにいくつかのコードを2回、時にはそれ以上実行するそうですね。 $watch イベント、モデルの状態を常にチェックするなど。

しかし、私のコード。

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つのレコードが挿入されます。何年もこの問題に頭を抱えていたので、私は明らかにまだ学んでいるようです。

解決方法は?

アプリのルーターが指定したナビゲーションは MyController というように

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

でも、こんなのもありました。 home.html :

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

これでコントローラは2回消化されました。を削除することで data-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回実行することになります。