Angular - najlepszy pattern do modyfikowania kilku obiektow.

Odpowiedz Nowy wątek
Pijany Kot
2016-11-30 23:12
Pijany Kot
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.

Pozostało 580 znaków

Pijany Kot
2016-12-01 19:19
Pijany Kot
0

Nikt nie wie o co kaman? :D

Pozostało 580 znaków

2016-12-02 00:25

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

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/ques[...]rective-for-execution-in-link)

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

edytowany 2x, ostatnio: soap_777, 2016-12-02 00:38

Pozostało 580 znaków

Wielki Orzeł
2016-12-02 08:59
Wielki Orzeł
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. ;)

Pozostało 580 znaków

2016-12-02 20:27
Moderator

Rejestracja: 13 lat temu

Ostatnio: 2 miesiące temu

Lokalizacja: Rzeszów

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.


Pozostało 580 znaków

Zimny Lew
2016-12-02 21:03
Zimny Lew
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.

Pozostało 580 znaków

Świetny Miecz
2016-12-02 22:19
Świetny Miecz
0

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

Pozostało 580 znaków

2016-12-03 23:45

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

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...

edytowany 2x, ostatnio: soap_777, 2016-12-03 23:47

Pozostało 580 znaków

Odpowiedz

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