Насоки и напътсвия за AngularJS


43

Здравейте,

В тази тема бих искал да дам няколко насоки, в случай че изберете AngularJS като ядро на приложението ви за предстоящия изпит:

1. Разгледайте шаблона, който дадох ТУК - ще ви спести много работа

2. Разучете как се добавят нови методи към $resource обекта. Забележете, че можете директно да закачите резултата за $scope без промиси и след като данните пристигнат, автоматично да се визуализат. Ето пример ТУК

3. Разучете как да редиректвате даден route, ако не отговаря на дадени условия (примерно user-a не е оторизиран). Пример има ТУК

4. Ако даден сървър е направен кадърно, грешките, които връща, ще бъдат унифицирани. Напишете си глобален errorHandler, който ги парсва и го използвайте него навсякъде.

Ако се сетя за още в последствие, ще ги добавям в тази тема.

Поздрави,

Ивайло




Отговори



4

Благодаря за насоките, помагат много!

Имам въпросче за Music Artists. Функционалността за филтриране и сортиране на албумите на артиста не работи при мен. Пробвам и тук http://musicartists.herokuapp.com/#/artist-details/1 и също нищо не се случва когато се избирам опция от Sort by или пиша в Search полето.

Досега не успявам да открия проблема, някой има ли идея какъв може да е?


Edit: За всички, които са се чудили или може да имат подобен проблем, тъй като може да възникне и на други места, ето малко инфо:

ngIf, ngSwitch, ngRepeat, ngView и ngInclude създават собствен child scope, затова е препоръчително да не се използват скаларни променливи в ngМodel директивата, а да се използват обекти, за да бъдат достъпни и извън този scope:

https://github.com/angular/angular.js/wiki/Understanding-Scopes

This issue with primitives can be easily avoided by following the "best practice" of always have a '.' in your ng-models – watch 3 minutes worth. Misko demonstrates the primitive binding issue with ng-switch.

Допълнителна информация:
https://github.com/angular/angular.js/issues/4046
https://github.com/angular/angular.js/issues/7216


Edit 2: Ето фикс за Music artists, който оправи проблема при мен:
https://github.com/pdrosos/Music-Artists/commit/5904bf0e3c1932e8d4c7241129790772d79e2bae


от pavlinadrosos (950 точки)


0
Здравей, в artist-details.html има едно ng-if="artist.albums". Като го махнах, при мен заработи филтирането и сортирането. Не съм търсил защо му пречи този ng-if.

от dob_sal (25 точки)

0
Mного ти благодаря, действително работи така. Слагам малко инфо в коментара, за да е по-видимо за всички.

от pavlinadrosos (950 точки)


0
Имам въпрос, пускам си web api сървара който се състои само от users които се генират от visual studio с всичките настройки. Пускам след това ангулар, сменям адреса, но ми гърми с Invalid HTTP status code 405, а с Postman няма проблеми, добавям cors, в webapiconfig и в global.asax, обаче тогава ми гърми че има 2 access control orrigina, като през постмана пак работи и другото което ми направи впечетление е че request method в браузъра е options, а не пост и немога да го подкарам.

от Ilian987 (387 точки)


0
Виж в темата на колегата там в коментарите е отговорът на проблема ти ;-) http://forums.academy.telerik.com/174232/web-services-tictactoe-%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%BE

от kizisoft (803 точки)


0

Може ли някой да сподели какво се има предвид под глобален errorHandler. $exceptionHandler-а на angularjs ли трябва да ползваме по някакъв начин?


от SvilenB (215 точки)


0
както си създаваш някакви променливи (и дори константи) с app.value - така да си създадеш нещо от сорта на app.value('errorHandler', function(error) {console.log(error)}) - така винаги ще го подаваш примерно като callback при promises (само не забравяй да си го request - неш в самия controller / service)

от dzhenko (3893 точки)


0

Темплейта беше доста полезен за изпита, както и насоките ( голямо благодаря @Ivo). Спестиха доста време, което замина в борба с други функционалности :)

На изпита не успях да стигна до частта с unauthorized редиректа, но после го разчовърках и забелязах нещо. Когато е реализирано, с resolve и редирект при routheChaneError, ако се опитаме да достъпим някаква страница за която нямаме достъп, явно angular  записва в history-то оригиналната страница която сме опитали да достъпим и след това ни редиректва към unauthorized. Това обаче чупи хисторито, защото предишната страница, е тази която нямаме права и тя пак ни пренасочва към unauthorized и на практика си седим там и не ни работи back бутона.

Това което аз измислих за да си реша този проблем не е най-елегантното решение, но работи. В routa на съответния ресурс вместо templateUrl с view-то, ползвам  template: '<div ng-include="content"></div>' и в контролера правя проверка дали потребителя е оторизиран, и зареждам съответния template в content

if(identity.isAuthenticated())

    {

        $scope.content="views/partials/resourse.html";

    }

    else

    {

        $scope.content="views/partials/unauthorized.html";

    }

Така се получава един паразитен div, но пък histori-то работи, с единственото изключение, че ако подадеш като параметър нещо на кирилица, примерно за route /resource/:id, напишеш /resource/тест, histori-то тоново се чупи и няма back .

Някой, ако се сеща за по хитър начин да се направи това, може да го сподели.


от ivand (862 точки)


0
Линкът за шаблона, който е направил Иво не работи. Връща ме на http://telerikacademy.com/Forum/Home . Може ли да го оправите ? 

от Hachiko (380 точки)


2

от Nikolay.IT (39117 точки)