Chciałbym założyć obietnicę, a następnie wrzucić ją do dyrektywy (używając typu atrybutu "=" atrybutów danych) i wykonać w dyrektywie magię then
, ale obietnica jako atrybut wydaje się powodować, że obietnica zostanie rozwiązana jako undefined
, więc then
(i każda inna funkcja obietnicy) jest niedostępna.Jak przekazać obietnice jako atrybuty dyrektyw w Angular
Odpowiedz
Podejrzewam, jest to spowodowane tym konkretnym uszczypnąć:
$ q obietnice są rozpoznawane przez silnik szablonów w kanciaste, co oznacza, że w szablonach można traktować obietnice załączone do zakresu, jak gdyby były one Uzyskane wartości - angular $q docs
i jest zasadniczo skutkuje obietnicy przekształcany w szablonie wartości $$v
że obietnica stosuje do przechowywania otrzymaną wartość, a w fazie wiążącej jest prawdopodobnie nadal nieokreślone - przekształcona wartość (tj. niezdefiniowana), a nie sama obietnica jest następnie przekazywana do dyrektywy.
Obejście nie polega na użyciu samej obietnicy jako atrybutu przekazanego do dyrektywy, ale na uczynieniu jej częścią obiektu nadrzędnego: obiekt nadrzędny nie będzie działał z magią silnika q/szablonów, a więc " Będą w stanie zagłębić się w obietnicę od rodzica i uzyskać tam dostęp do funkcji then
.
Zobacz http://jsfiddle.net/cebjyre/95sjT/ dla przykładu - odkomentowanie linia 32 będzie powodować awarię ze względu na najwyższym poziomie nie jest już obietnicą rzeczywiście obietnica w tym punkcie, natomiast drugi obietnicy poziomu na linii 17 działa dobrze
Dzięki. Dodałem to do Angular Docs.
http://docs.angularjs.org/api/#comment-984109158
Aby osiągnąć ten owinąć obiecujące jednostki dominującej: $ scope.myDirectiveAtrribute = {obietnica: deferred.promise}, a następnie w dostęp dyrektywa obietnicę
$ zakres. myDirectiveAtrribute.promise.then (function() {});
Dzięki za udostępnienie. Twoje rozwiązanie działa! – ValeriiVasin
Użyłem tej strategii również przy użyciu komponentów Angular 1.5. Użyłem angular.element (document) .ready(), a następnie uzyskałem dostęp do obietnicy z gotowego oddzwaniania. Prawdopodobnie przypadek użycia, aby trzymać się dyrektyw zamiast komponentów, ale działa. – mbokil
- 1. Angular - dekorowanie dyrektyw
- 2. Angular js Zagnieżdżanie niestandardowych dyrektyw
- 3. Przypisując atrybuty, musisz przekazać skrót jako argument
- 4. Angular 2 obietnice/obserwowalne dwa łańcuchy wydarzeń?
- 5. Dodaj atrybuty do Angular 2 Selektor składników
- 6. Jak działają obietnice w JavaScript?
- 7. Jak przekazać @selector jako parametr?
- 8. Jak przekazać adnotację jako parametr?
- 9. Jak przekazać `i` jako funkcję w grze?
- 10. Jak przekazać metodę jako parametr w Javie?
- 11. jak listy przekazać jako parametr w funkcji
- 12. Jak przekazać funkcję jako parametr w C?
- 13. Jak przekazać funkcję jako parametr w Lua?
- 14. $ q.all i zagnieżdżone obietnice
- 15. Łańcuchowe obietnice w Coffeescript
- 16. Zachowanie kontrolera wewnątrz dyrektyw
- 17. Jak przekazać atrybuty <option> do select2?
- 18. Descriptors jako atrybuty instancji w Pythonie
- 19. Zagnieżdżanie dyrektyw w dyrektywach
- 20. Łańcuchowe obietnice w wodospadzie
- 21. Angularne obietnice warunkowe
- 22. warunkowe obietnice
- 23. Angular 2: Jak przekazać parametry trasy do podprogramu?
- 24. Jak testować obietnice z Mocha
- 25. Jak wykonać obietnice jQuery w phantomJS?
- 26. Jak składać obietnice działa w IE11
- 27. Jak warunkowo dodać dyrektyw w Kątowymi 2
- 28. Jak przekazać adres URL jako parametr obejmujący
- 29. Jak przekazać losową funkcję jako argument?
- 30. Jak przekazać plik tekstowy jako argument?
Dzięki. To powinno być wybrane jako poprawna odpowiedź. – manikanta
Dziękuję za tę pomocną odpowiedź. To dość paskudna brodawka na Angular - obsługuje oprawę obietnic w sposób przejrzysty bezpośrednio w widoku, ale nie w szablonach. Więc teraz, nawet jeśli chcesz przekazać proste dane, musisz zawrzeć je w obietnicy i obiekcie opakowania. A teraz mój szablon dyrektywy jest pełen brzydoty, jak '{{itemList.promise [index]}}'. Dyrektywa nie jest tak płynna, jak bym chciała. –
z obietnic 1.2 obietnice nie są już rozpoznawane przez silnik szablonów –