私のアプリで複数の共有データサービスの問題に直面しましたが、ここで説明しようとします。AngularJS、共有データサービスが複数回トリガされました
コントローラ 'home'を持つホームページでは、ユーザーがアイテム(たとえば最初のもの)の1つを選択した後で、このビューにリダイレクトして、表'。ビューにはテーブルとタブが下にあり、それぞれのタブには独自のコントローラ 'tab1 and etc'があります。行をクリックすると、タブのコントローラ間でこの行のIDを共有しています。このタブは、この特定の行に関連するコンテンツをロードできます。今のところすべてがうまくいく。
次に、ユーザーがボタンのホームをクリックすると、ホームページにリダイレクトされ、アイテム(たとえば最初のアイテムなど)を再度クリックすると、共有サービスが2回トリガーされ、同じIDが3回時間シェアサービスが3回などトリガされます。
私のコードの下で、私が誰かが私に説明してくれれば幸いです。前もって感謝します。
app.controller('table', [
'$scope', 'tab1ID', 'tab2ID', 'tab3ID'
function ($scope, tab1ID, tab2ID, tab3ID) {
$scope.rowSelection($scope, function (row) {
tab1ID.setId(row.id);
tab2ID.setId(row.id);
tab3ID.setId(row.id)
});
app.controller('tab1', [
'$scope', 'tab1ID', dataService
function ($scope, tab1ID, dataService) {
tab1ID.getId().then(null, null, function (id) {
// return increment count of 'id' after redirecting from home view to table view
// dataService firing for each incremented id (1 for 1, 2 for 2 and etc)
dataService.rowData(id)
.then(function (res) {
$scope.data = res;
})
});
.factory(
'tab1ID', function ($q) {
var self = this,
defer = $q.defer();
this.share = '';
return {
getId: function() {
return defer.promise;
},
setId: function (id) {
self.share = id;
defer.notify(self.share);
}
}
}
);