• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Angular i dynaminczny ng-click

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
914 wizyt
pytanie zadane 9 listopada 2017 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
zamknięte 9 listopada 2017 przez Vorex444

Cześć, chce aby button przyjął dynamiczna nazwę

<button class="details" ng-click='{{boot.click}}'>Szczegóły</button>

 

 $scope.boot = 
    [
        {
            name: "Wyprzedaż1",
            price: '100',
            image: 'adidas/adidas1',
            click: 'alert()'
        }
$scope.alert = function(){
        alert('elo');
    };

Nie wiem dlaczego ale nie działa mi to, oczywiście uzywam kontrolera i wszystko co potrzebne, wyskakuje taki błąd

angular.js:14525 Error: [$parse:syntax] http://errors.angularjs.org/1.6.4/$parse/syntax?p0=%7B&p1=invalid%20key&p2=2&p3=%7B%7Bboot.click%7D%7D&p4=%7Bboot.click%7D%7D
    at angular.js:38
    at s.throwError (angular.js:15090)
    at s.object (angular.js:15079)
    at s.primary (angular.js:14968)
    at s.unary (angular.js:14956)
    at s.multiplicative (angular.js:14943)
    at s.additive (angular.js:14934)
    at s.relational (angular.js:14925)
    at s.equality (angular.js:14916)
    at s.logicalAND (angular.js:14908) "<button class="details" ng-click="{{boot.click}}">"

 

komentarz zamknięcia: problem rozwiazny
komentarz 9 listopada 2017 przez Vorex444 Dyskutant (9,610 p.)
dobra juz wszystko śmiga, sorry ale to juz 12h dzis przed kompem :D
komentarz 9 listopada 2017 przez Vorex444 Dyskutant (9,610 p.)

Jeszce mam pytanko, bo chciałem teraz własnie aby ta funkcja ng-click zmieniła diva z display none na block, to zadziałało, w niej umieściłem {{name}} i w funkcji zapisałem $scope.name = "name";

i nie działa nie pojmuje, konsola 

TypeError: Cannot set property 'name' of undefined
    at Object.$scope.adidas1 [as click] (angular.js:26)
    at fn (eval at compile (angular.js:15358), <anonymous>:4:167)
    at e (angular.js:26994)
    at b.$eval (angular.js:18161)
    at b.$apply (angular.js:18261)
    at HTMLButtonElement.<anonymous> (angular.js:26999)
    at hg (angular.js:3734)
    at HTMLButtonElement.d (angular.js:3722)
  $scope.adidas1 = function($scope){
        productDetails.style.display = "block";
        $scope.name = "name";
    };
    $scope.wyprzedaz = 
    [
        {
            name: "Wyprzedaż1",
            price: '100',
            image: 'adidas/adidas1',
            click: $scope.adidas1
        }
   ]

HTML 
<h2>{{name}}</h2>

 

komentarz 9 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)

 zmieniła diva z display none na block

Nie manipuluj DOMem z poziomu kontrolera ani widoku. Do tego służą ng-ifng-show ng-hide. Albo stwórz własną dyrektywę.

 Czym jest productDetails? Dlaczego do metody $scope.adidas1 przekazujesz obiekt $scope (błąd wskazuje na to, że nie ma on property name)? Jeśli to jest wywoływane przez ng-click, to możesz posłać obiekt $event, który jest angularowym aliasem dla natywnego eventa. Tylko, że tam też pewnie nie będzie property name.

Pokaż jeszcze, jak to zapisałeś z ng-click.

komentarz 11 listopada 2017 przez Vorex444 Dyskutant (9,610 p.)

Tym otwieram diva 

<button class="details" ng-click="boot.click()">Szczegóły</button>

A tu to 

    $scope.adidas1 = function($scope){
        productDetails.style.display = "block";
        $scope.name = "name";
    };

A tu div w ktorym chcialem podmienic zawartosc

<div class="product-details" id="productDetails" ng-controller="search">
    <h2>{{name}}</h2>
</div>

 

komentarz 12 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)

O ile nie zmieniłeś kodu, to ng-click="boot.click()" uruchamia metodę $scope.adidas1, która jest podpięta pod property click w obiekcie znajdującym się w tablicy. Wywołujesz tą metodę bez parametrów w ng-click, a w jej nagłówku zapisujesz, że chcesz argument $scope. Jak już pytałem poprzednio - dlaczego taki argument chcesz tam mieć? Obiekt $scope masz dostępny w kontrolerze przez dependency injection, więc on będzie obecny też i w tej funkcji. Błąd pojawia się dlatego, że zmienna lokalna $scope (która ma wartość undefined, bo wywołujesz funkcję bez parametru) nadpisuje obiekt $scope (poczytaj o zmiennych lokalnych w JavaScript), więc nie ma tam property name.

Wyrzuć style.display i użyj wspomnianych dyrektyw do usuwania/ukrywania elementów ng-if/ng-hide, a je zasilaj flagami (true/false).

Podobne pytania

0 głosów
1 odpowiedź 218 wizyt
pytanie zadane 24 sierpnia 2016 w JavaScript przez tajemniczyPan Nowicjusz (140 p.)
+1 głos
2 odpowiedzi 207 wizyt
pytanie zadane 3 kwietnia 2022 w JavaScript przez Bartek030 Obywatel (1,460 p.)
0 głosów
3 odpowiedzi 339 wizyt
pytanie zadane 16 stycznia 2017 w JavaScript przez Captivity Obywatel (1,030 p.)

93,187 zapytań

142,203 odpowiedzi

322,023 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2445p. - Łukasz Siedlecki
  6. 2443p. - rucin93
  7. 2252p. - Tomasz Bielak
  8. 2201p. - Michal Drewniak
  9. 2156p. - Marcin Putra
  10. 2152p. - Adrian Wieprzkowicz
  11. 2105p. - Mikbac
  12. 1941p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1480p. - Michał Telesz
  15. 1469p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...