2017-11-24 22 views
0

このトピックをカバーする他にもたくさんの質問がありますが、私の質問には本当に答えはありません。私は私のDBからデータを取得する関数を持っています。今私がngInitに関数を実行すると、関数は3回実行されますが、ngClickでは1回しか実行されません。Angularjs ngInitは3回繰り返されます - ngClick once

コードが変更されるのを監視するangular watchersがあるため、機能が複数回繰り返されるのは正常です。今私は実際にコードが繰り返されても構いませんが、問題は、関数を開始するときにtrueに変数を設定し、データを取得するときにfalseに変数を設定することです。しかし、今では変数がfalseに設定され、コードが再び実行されます。だから、私の変数は時期尚早に変更されます。

例:

controller.getItem = function(){ 
    controller.loading = true; 
    service.getSelectedItem($routeParams._id).then(function(response){ 
     if(response.data.state === 'success'){ 
      controller.myItem = response.data.item; 
      controller.loading = false; 
     } 
    }); 

} 

HTML:

<div id="item"> 
<!-- remove this comment to test ngInit --> 
<!-- <div id="item" ng-init="controller.getItem()"> --> 

    <button id="clickMe" ng-click="controller.getItem()">Get data</button> 

    <div class="panel panel-new"> 

     <div class="panel-header"> 

      <div class="row"> 

       <div class="col-xs-12"> 
        <h4>My Item - {{ controller.myItem._id }} 
        <small>added on: {{ controller.myItem.dateAdded | date: 'dd MMM yyyy' }}</small></h4> 
       </div> 

      </div> <!-- Close div for .row --> 

     </div> <!-- Close div for .panel-header --> 

    </div> 

</div> 

今私のロード画面が消え、私のコンテンツはまだundefinedです。 3回実行した後に限り、コンテンツには実際にデータが入力されます。

この関数がngClickで実行されているとき、それは完全に動作し、1回だけ実行されますが、ngInitで3回実行され、意図したとおりに動作しません。

この問題にどう対処するかわかりません。

+0

あなたはgetItemをどのように呼び出しているかのような少しコードを共有できますか? –

+0

ng-init = "controller.getItem()"またはng-click = "controller.getItem()"を呼び出すだけです。 –

+0

はng-repeatのng-initですか? –

答えて

0

さて、多くのデバッグの後、私はついにこの問題を発見しました。 、それでは私が起こっていたと思われたが、それはビューを作成したことである

<div ng-if="auth" id="ngView" class="ngView"> 
    <div ng-view> 
    </div> 
</div> 

機能を走った、ビューを作成し、機能を実行した:問題は、私は私のインデックスページでこれを持っていたということでした。だから、すべてが何度も起こっているのです。

0

もう少し詳しくお聞かせください。特定のコントローラー内でnginitを使用する方が良いはずです。特定のコントローラを呼び出すと、動作に従って完全に動作します。

関連する問題