Używam AngularJS, jeśli ustawiam wartość prostego pola tekstowego na coś takiego jak „bob” poniżej. Wartość nie wyświetla się, jeśli ng-model
atrybut zostanie dodany.
<input type="text"
id="rootFolder"
ng-model="rootFolders"
disabled="disabled"
value="Bob"
size="40"/>
Ktoś wie o prostym obejściu, aby ustawić domyślne dane wejściowe na coś i zachować ng-model
? Próbowałem użyć ng-bind
wartości domyślnej, ale to też nie działa.
javascript
html
angularjs
Witaj świecie
źródło
źródło
Vojta opisał „Angular way”, ale jeśli naprawdę musisz to zrobić, @urbanek niedawno opublikował obejście za pomocą ng-init:
https://groups.google.com/d/msg/angular/Hn3eztNHFXw/wk3HyOl9fhcJ
źródło
value="Bob"
udziału w tagu wejściowym.Wydaje się, że przesłanianie dyrektywy wejściowej wykonuje zadanie. Wprowadziłem kilka drobnych zmian w kodzie Dana Hunsakera :
$parse().assign()
na polach bez atrybutów ngModel.assign()
kolejność paramów funkcji.źródło
Angular way
Prawidłowym sposobem Angulara jest napisanie jednej strony aplikacji AJAX w szablonie formularza, a następnie wypełnienie jej dynamicznie z modelu. Model nie jest domyślnie wypełniany z formularza, ponieważ jest jedynym źródłem prawdy. Zamiast tego Angular pójdzie w drugą stronę i spróbuje wypełnić formularz z modelu.
Jeśli jednak nie masz czasu, aby zacząć od nowa
Jeśli masz napisaną aplikację, może to wymagać dość dużych zmian architektonicznych. Jeśli próbujesz użyć Angulara do ulepszenia istniejącego formularza, zamiast budować od podstaw całą aplikację na jednej stronie, możesz pobrać wartość z formularza i zapisać ją w zakresie w czasie łączenia za pomocą dyrektywy. Angular następnie powiąże wartość w zakresie z powrotem do formularza i utrzyma ją w synchronizacji.
Korzystanie z dyrektywy
Możesz użyć stosunkowo prostej dyrektywy, aby pobrać wartość z formularza i załadować ją do bieżącego zakresu. Tutaj zdefiniowałem dyrektywę initFromForm.
Widzisz, zdefiniowałem kilka błędów, aby uzyskać nazwę modelu. Możesz użyć tej dyrektywy w połączeniu z dyrektywą ngModel lub powiązać z czymś innym niż $ scope, jeśli wolisz.
Użyj tego w ten sposób:
Uwaga: będzie to również działać z obszarami tekstowymi i wybierz menu rozwijane.
źródło
input="text"
. Jeśli masznumber
rzut rzuci Model nie jest typunumber
docs.quarejs.org/error/ngModel/numfmt?p0=333if (attrs.type === "number") val = parseInt(val);
Aktualizacja: Moja pierwotna odpowiedź polegała na tym, że kontroler zawiera kod rozpoznający DOM, co łamie konwencje Angular na korzyść HTML. @dmackerman wspomniał o dyrektywach w komentarzu do mojej odpowiedzi i do tej pory całkowicie tego brakowało. Dzięki tym wejściom oto właściwy sposób na zrobienie tego bez łamania konwencji Angular lub HTML:
Jest też sposób na uzyskanie obu - pobierz wartość elementu i użyj go do aktualizacji modelu w dyrektywie:
i wtedy:
Możesz oczywiście zmodyfikować powyższą dyrektywę, aby zrobić więcej z
value
atrybutem przed ustawieniem modelu na jego wartość, w tym używając$parse(attrs.value, scope)
do traktowaniavalue
atrybutu jako wyrażenia kątowego (chociaż prawdopodobnie użyłbym do tego innego atrybutu [niestandardowego] osobiście, więc standardowe atrybuty HTML są konsekwentnie traktowane jako stałe).Istnieje również podobne pytanie w temacie Udostępnianie danych dostępnych w szablonie dla modelu ng, które również może być interesujące.
źródło
Jeśli korzystasz z dyrektywy AngularJs ngModel, pamiętaj, że wartość
value
atrybutu nie wiąże się z polem ngModel. Musisz go zainicjować samodzielnie, a najlepszym sposobem na to jest:źródło
To niewielka modyfikacja wcześniejszych odpowiedzi ...
$ Parsowanie nie jest potrzebne
źródło
Cześć, możesz wypróbować poniższe metody przy inicjalizacji modelu.
Tutaj możesz zainicjować model ng pola tekstowego na dwa sposoby
- Z użyciem ng-init
- Z użyciem $ scope w js
źródło
Problem polega na tym, że musisz ustawić model ng jako element nadrzędny w miejscu, w którym chcesz ustawić wartość / wartość ng. Jak wspomniano w Angular:
Np .: To jest wykonany kod:
Uwaga: W powyższym przypadku już miałem odpowiedź JSON na model ng i wartość, właśnie dodałem inną właściwość do obiektu JS jako „MarketPeers”. Model i wartość mogą więc zależeć od potrzeb, ale myślę, że ten proces pomoże, zarówno mieć model ng, jak i wartość, ale nie mieć ich na tym samym elemencie.
źródło
Miałem podobny problem. Nie mogłem używać
value="something"
do wyświetlania i edycji. Musiałem użyć poniższego polecenia wewnątrz mojego<input>
modelu z deklarowanym modelem.Gdzie mam listę danych w obiekcie
userDataToPass
oraz element, który muszę wyświetlić i edytowaćpinCode
.Z tego samego powodu nawiązałem do tego filmu na YouTube
źródło