簡體   English   中英

發出角度事件更改數據

[英]Angular event change data emitted

什么是執行以下方案的最佳方法:

在一個組件中,我有一個函數可以像這樣構建一個數組:

var arr = ['a','b'];

在父控制器中,我希望能夠根據需要更改此數組。 我以為可以為此使用事件:在PHP(使用Laravel)中,我可以在偵聽該事件時通過引用來調用變量,這樣,當我在listen塊內修改變量時,原始變量將被更新為。

在角度上,我試圖在rootScope上$emit一個事件,並在父控制器上監聽該事件:

// directive controller
$rootScope.$emit('$genericColumns', arr)

// parent controller
$rootScope.$on('$genericColumns', function($event, arr) {
        arr = [];
        return arr;
    });

但是這樣做不會修改原始的arr變量。

做到這一點的最佳方法是什么? 需要時,如何在子指令范圍內修改變量?

我會使用一項服務。

angular.module('app').factory('genericColumns', function(){
  var columns = {};

  columns.arr = [];   

  return columns;
});

顯然,您需要在您的應用程序中正確引用它,我在這里只是使用過app

然后將其注入您的控制器,他們將共享數據。

angular.module('app').controller('ColumnCtrl', function (genericColumns){
  $scope.columns = genericColumns.arr;
});

盡管我建議為此使用觀察者模式 ,而不要使用$rootScope ,但仍可以對每個控制器使用$ emit和$ on來知道何時進行了更改。

我最終創建了一個服務:

angular.module('common.directives.lists', [])
                .factory('$generic', function() {
                    return {Columns: []};
                })

然后,在我的兩個控制器中,我注入了$ generic。 在我的指令控制器中,我進入了我的主要專欄,然后,我在$ rootScope $rootScope.$broadcast('$genericColumns')上廣播了一個事件。 在此之后,我可以在父控制器上監聽$genericColumns事件,然后在那里修改$ generic.Columns數組(添加其他列),更改也將反映在指令控制器上。 可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM