Angular - najlepszy pattern do modyfikowania kilku obiektow.

0

Czesc, zastanawiam sie nad najlepszym sposobem do modyfikowania kilku obiektow (np. w tablicy) przy pomocy jednego eventu (np. w ng-repeat). Podam przyklad:


function ParentController($scope) {
 this.data = [/* obiekty ..*/]  // jakas tablica obiektow

 $scope.$on('emitEvent',() => {
   
    // sposob 1. 
    this.data.map(fn) // fn - jakies tam modyfikacje, dzieki czemu mozemy zmienic caly obiekt.

   // sposob 2.
    $scope.$broadcast('broadCastEvent');
 })
}

function ChildController($scope) {
 this.multiActive = function() { // jesli chce pojedynczy klikniety obiekt to this.data nam go wyrzuci ale nie o to chodzi
    $scope.$emit('emitEvent');
 }
 
 //sposob 2.
 $scope.$on('broadCastEvent',fn) fn - jakies modyfikacje, dzieki czemu lapiemy znow wszystkie obiekty
}

 
<!-- app-->
<div ng-repeat="data in ParentController.data">
 <div child-component data="data"></div>
</div>

<!-- child-component -->

<div>
{{ChildController.data.isActive ? 'active' : null}}
<button ng-click="ChildController.multiActive()"></button>
</div>
 

Chcialbym uzyskac jak najlepszy, najbardziej clean sposob. Oczywiscie mozna to tez zrobic callbackiem z poziomu child componentu, ale dalsza procedura jest taka sama. Nie wiem czy jest to najlepszy sposob na to dlatego szukam pomocy u bardziej doswiadczonych.

0

Nikt nie wie o co kaman? :D

0

Nie do końca rozumiem o co dokładnie ci chodzi.
Ogólnie to co robisz teraz jest brzydkie a this.map zwraca nowa arrayke dlatego żeby to działało powinieneś dać this.data = this.data.map
Drugi sposób całkowicie odpada... puszczanie eventu do Parenta żeby emitowałł event do Childa ? Masakra :P
Przerzuć się na .component() i skorzystaj z tego - https://github.com/toddmotto/angular-styleguide - wszystko pięknie opisane.
Ew. jeśli nie chcesz korzystać z lepszego .component() syntax to podawaj funkcje od parenta do childa (http://stackoverflow.com/questions/29857998/proper-way-to-pass-functions-to-directive-for-execution-in-link)

Ale ogólnie polecam .component() - Będziesz miał wszystko ładniej i lepiej.

0

Ogólnie to co robisz teraz jest brzydkie a this.map zwraca nowa arrayke

  • wiem dlatego szukam lepszego sposobu, a map wiem ze zwraca nowa, pisalem to na szybko.

Ew. jeśli nie chcesz korzystać z lepszego .component() syntax to podawaj funkcje od parenta do childa

  • tak napisalem, ze mozna tak zrobic jeszcze.

Co do komponentow to tak, chce sie na nie przerzucic, dzieki za rady. ;)

0

Porzuć Angular 1, bo to pomyłka. Angular 2 nie wiem. Ogólnie zainteresuj się jakimś menedżerem stanu może. To najlepsza droga, jeżeli Twoja aplikacja ma być większa niż prosta pierdoła.

0

Porzuć Angular 1, bo to pomyłka. Angular 2 nie wiem. Ogólnie zainteresuj się jakimś menedżerem stanu może. To najlepsza droga, jeżeli Twoja aplikacja ma być większa niż prosta pierdoła.

Wiem, ze to pomylka, ale w robocie caly czas jest.. Angulara 2 ucze sie przy odrobinie czasu, jak na razie na sucho bez klepania, bo nie mam czasu, ale przyjdzie na to czas. I z tego co widze sa znacznie lepsze rozwiazania juz na samym starcie, gdzie w Angularze 1.x osiagnac cos takiego to bylby hardcore, bo widac ze ekipa poprawia swoje bledy i na pewno ladniejszy kod do utrzymywania. Myslalem nad reduxem, bo uzywam go w react, ale jest to odseparowany modul od aplikacji tak naprawde i nie wiem czy jest sens go wciagac, bo modul nieduzy.

0

A co polecacie łatwiejszego zamiast Angular 2? Krążą opinie że Angular jest dużo bardziej pokręcony i trudniejszy od jQuery.

0

Umiem obydwa ale polecam Reacta. Nie argumentuje bo tego jest mnóstwo w internecie - naucz się go bo jest malutki nawet ze state managerem.

edit
nie mowie o angular 2 a angular1, angular 2 na pierwszy rzut oka wydaje się jakby było go za dużo wszędzie...

edit2
Nie traktujcie tego jakby to się wykluczało, można umieć jQuery, Angulara 1, 2 i Reacta i wcale nie poświęcić na to dużo czasu...

1 użytkowników online, w tym zalogowanych: 0, gości: 1