このトピックをカバーする他にもたくさんの質問がありますが、私の質問には本当に答えはありません。私は私の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回実行され、意図したとおりに動作しません。
この問題にどう対処するかわかりません。
あなたはgetItemをどのように呼び出しているかのような少しコードを共有できますか? –
ng-init = "controller.getItem()"またはng-click = "controller.getItem()"を呼び出すだけです。 –
はng-repeatのng-initですか? –