Loading...
nakov avatar nakov SoftUni Team Trainer 5295 Точки

SPA with AngularJS: курсови проекти

Колеги, готови сме с условията на курсовите проекти за курса "SPA with AngularJS":

Както знаете, този курс ще се завършва с практически проект, който всеки си прави вкъщи. Ще има защита на живо и по Skype за онлайн курсистите.

Какво представлява AngularJS Ads проектът?

  • Дадено вие как изглеждат екраните от система за онлайн обяви (UI prototype)
  • Дадена е REST услуга, която пази данните и имплементира всички необходини действия
  • Посетителите на сайта без регистрация могат да разглеждат обявите, да се регистрират и логват
  • Логнатите потребители могат да си редактират обявите
  • Администраторът (поребител с по-високи права) може да редактира обяви, потребители, категории и градове - тази част е бонус, защото е по-трудна и по-оебмна за имплементация

За да ви помогнем по изграждането на практическия курсов проект добавяме още учебни занятия към курса:

  • 5 януари от 12 до 20 часа - колегата Владо ще пише проекта на живо пред всички, от нулата стъпка по стъпка. Ще запишем видео за онлайн курсистите. Няма да ви дадем сорс кода, за да си го напишете сами. Това е важно условие в заданието.
  • 6 януари - от 16 до 22 часа - ще правим Lab, отново работа по практическия проект.
  • 11 януари (неделя) - защита на проектите - ще направим записване и разпределение по часове.

В понеделник и вторник остават планираните учебни занятия:

  • Services, ruting, directives
  • Работа по практическия проект

Обръщам внимание че има важно изискане да работите с Git и да commit-вате редовно в GitHub. Ако не го правите, ще загубите половината от точките за проекта. Трябва да покажете, че сте работили здраво по този проект и не сте го преписали от ваш колега.

Проектите са индивидуални. Няма да има разпределение на отбори.

Ще запиша и видео разяснения по проекта до няколко дни.

Започвайте работа! Имате право да обсъждате публично и да споделяте кой до къде е стигнал.

За REST услугите админската парола е admin / admin.

Препоръчам ви да си пуснете услугите локално (показано е във видеото как става с [Ctrl+F5] във Visual Studio).

19
JavaScript Applications 26/12/2014 22:39:07
ttitto avatar ttitto 1153 Точки

Може ли някой да напише коя цифричка на кой статус на обява отговаря, че не можах да намеря такава информация. Гледах в локалната база данни, но там няма такава таблица за статусите. Така като гледам има 4 вида статута:

Published

Waiting Approval

Inactive

Rejected

0
arsoman avatar arsoman 419 Точки

Аз този филтър го правя по стринговете, засега не знам друг начин.

0
ttitto avatar ttitto 1153 Точки

?! Как по стринговете?! В базата се очаква int, not null за статута

0
nakov avatar nakov SoftUni Team Trainer 5295 Точки

1 Inactive

2 Waiting Approval

3 Published

4 Rejected

1
arsoman avatar arsoman 419 Точки

Колеги, малко помощ:

при редакция на инфо за обява, искам да напълни обикновени input полета със съответното инфо, примерно ad.title, но и като променя текста да взема новия текст. За целта му давам ng-model="test.title", но това действие директно спира извикването на стойността в полето, то остава празно, но пък като дам inspect element, виждам стойността му в html-a! Пълен мат съм, никъде няма грешки...

<input class="selectInEdit" type="text"  value="{{ad.title}}" ng-model="test.title" /> - това НЕ показва value, но ГО ИМА в "десен бутон/inspect element"!

<input class="selectInEdit" type="text"  value="{{ad.title}}" /> - това ПОКАЗВА стойността в полето, но пък няма как да го взема в контролера!

Дали е бъг, защото и в двата варианта го виждам в "десен бутон/inspect element"!

PS: като дам на полето атрибут placeholder="{{ad.title}}", тогава го визуализира правилно, странностите продължават....

0
01/01/2015 20:35:30
nakov avatar nakov SoftUni Team Trainer 5295 Точки

Не задавай vlaue и ползвай ng-model, а в контролера трябва да пълниш модела с данни.

0
arsoman avatar arsoman 419 Точки

Но в демото е показано да се листва информацията, затова тръгнах по този път, този вариант при select работи, но за input, textarea търся начин, ако не, ще го правя в контролера...

PS: схванах нещата, малко хакерски може би, но направо в полетата подавам value и ng-model, да са от вече заредената реклама и при submit се подменят автоматично! Благодаря!

0
01/01/2015 21:35:24
kgerov avatar kgerov 49 Точки

Здравейте! Само да спомена за едно несъответствие в сърварната част. Когато се регистрираш и използваш вече зает емайл, сървъра ще ти върне грешка и ще ти каже, че емайла вече е зает. Тази проверка липсва при edit на профил. Ако вече си се регистрирал можеш да си смениш емайла на какъвто поискаш.

4
VGeorgiev avatar VGeorgiev 1384 Точки

Благодаря. Push-нал съм във GitHub. Оправено е. Днес/утре ще качим нова версия във Azure.

1
06/01/2015 15:35:45
kasskata avatar kasskata 492 Точки

Едно много важно нещо забелязах, и веднага искам да го споделя с вас. 

АКО използвате линкове за бутони (<a href=# ng-click="goTo(mainataSi)">something</a>), href от HTML презаписва ng-click на Angular, ng-href също не помага,вижда се че сменя страницата в route, но за части от секундата и се връща на default страницата,зададена от view-то, просто напишете ето така и се оправя, пък ще си изолзвате стила na bootstrap за линка:

<a href ng-click="goTo(mainataSi)">something</a>

Това откритие ми отне 2 часа - благодаря на лектора :P

Още нещо - не използвайте думата"Ad" НИКЪДЕ в проекта - има проблеми с spyweare програмите в нета, както и с ABP! Все пак "Ads" е мръсна дума в интернет. Използвайте синоними.

Иначе аз си подкарах UI.Bootstrap Pagination(след 4 часа мъка за една главна буква, която не отговаряше на Bootstrap template). UI.Bootstrap може да ви потрябва на още 2-3 места, така че ви съветвам да го разучите за проекта, пък и за вбъдеще май няма проект на AngularJs без Bootstrap. Симбиозата е доста силна.

Извод:

"Всяка малка стъпка в AngularJS е една голяма клизма за мен".

5
02/01/2015 19:17:01
borislavml avatar borislavml 368 Точки

Днес си правих security на раутовете и ми инзикнаха въпроси как ще се случи това за admin частта. Проверката ми за логнат юзър е просто if(sessionStorage['currentUser']) и тогава пускам юзъра до съответния url, иначе го подканвам да се логне. Това може да бъде заобикалено много лесно разбира се, като просто се набие един обект 'currentUser' в sessionStorage(с каквито и да е дани в него за username и sessionToken) и не виждам по-умен начин(с cookie е същото). Всеки с  малко повече знания и време, може да разгледа кода и да го заобиколи. Но не печели нищо от това разбира се, защото дори и да стигне до тези раутове, и да му се рендират разни форми няма как да прави  заявки без асайнат от сървъра  sessionToken. Kaкво става обаче, ако логнат юзър ми разгледа authorzation кода(напълно възможно) и види, че единствената разлика межди него и админа е isAdmin == true; Реално разликата е само това? Друга аз не виждам! Когато реша да правя админската част ауторизацията ми за достъп до тези раутове може да бъде само това  isAdmin == true. И какво става когато редови юзър си сетне сам тази проверка.Ще има достъп до админските раутове, и като си има и сешън тоукън ще може да прави и заявки. Може и да не стоят така нещата, защото не съм стигнал до там за да го изтествам така ли е реаллно. Някой ако е правил админски панел да сподели. Не трябва ли при всяко си дйствие(заявка) админа да се аутентикира с парола, или в реално работещо приложение баш дебелата администраията да става само локално на някаква машина, или поне на друг адрес и порт? Или пък може би sessionToken-а издаден на админа е по-специален и се проверява при заявка!?

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

0
Tr00peR avatar Tr00peR 566 Точки

Или пък може би sessionToken-а издаден на админа е по-специален и се проверява при заявка!?

Отговорил си си на въпроса. :)

1
borislavml avatar borislavml 368 Точки

Мерси, ше спа спокойно! laughing

0
petrovaliev95 avatar petrovaliev95 358 Точки

Колега хубаво си го казал "Не трябва ли при всяко си дйствие(заявка) админа да се аутентикира с парола, или в реално работещо приложение баш дебелата администраията да става само локално на някаква машина, или поне на друг адрес и порт?". Гледах разни туториали и там казват, че трябва да има такава заявка за да може да аутентикира при всеки роот юзъра. Иначе в нашия случай и "sessionStorage" ще ти свърши работа.

0
03/01/2015 23:17:45
slavi.koen avatar slavi.koen 38 Точки

Здравейте,

От няколко часа се мъча и накравя си казах срам не срам ще питам. Та поради някаква причина комбобоксите не ми се отварят копирам го кода точно както си от от bootstrap-a, но файда гледах и пробвах всякакви начини тъй като не го бях пипал до сега, но без резултатно, ако някой се сеща защо така прави ще съм му много благодарен :)

2
MartinBorisov94 avatar MartinBorisov94 52 Точки

Имаш фаел bootstrap.js трябва да го заредиш, а преди него зареди jQuery. Не се срамувай всеки се учи и аз го псувах това няколко дни.

0
slavi.koen avatar slavi.koen 38 Точки

хмм bootstrapa си ми е зареден даже и този със темата, но не знаех, че и jQuery трябва да слагам. Добавих го, но няма много ефект всичко си работи точно големини шрифтове цветове, само комбобоците не искат да се разпъват. :S

0
MartinBorisov94 avatar MartinBorisov94 52 Точки

За да проработат по- яките неща ми се наложи да го сложа, съвсем случайно и аз разбрах. На мен дропдолн менюто не работеше и доста му се понервирах. Ама съвета ми е не се занимавай толкова с това. Играчка си е която отнема време, а проекта има мн за писане :)

1
slavi.koen avatar slavi.koen 38 Точки

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

8
03/01/2015 01:30:34
GoShow avatar GoShow 595 Точки

Здравейте! Честита Нова Година на всички!!! Много успехи, здраве и късмет на всички! За голямо мое съжаление, работата ми върху проекта, започна доста по-късно от очакванато(причините на са относно нежелание или мързел). Вероятността да не успея да направя всичко, е много голяма, просто защото няма да имам нужното време. Въпреки, че ще опитвам до последно да се справя, не искам да защитавам половинчати и недовършени неща, затова въпроса ми по-скоро към екипа е: кога и как ще има възможност за повишаване или поправяне на оценката от този проект?

3
Anita avatar Anita 360 Точки

В графика на Софтуни пише, че на 27.01.2015(четвъртък) от 10ч до 16ч ще бъде поправката за Angular JS.

Но какви ще бъдат изискванията за тази поправка не са ясни. Дали ще е същия проект с нови допълнителни подусловия  или  стария проект + изпит не е уточнено.

Преполагам, че до 1 седмица официално ще стане ясно и това.

 

 

 

1
03/01/2015 20:06:26
GoShow avatar GoShow 595 Точки

Благодаря! Остана да изчакаме и официалната информация :) за поправката, но все пак дано не се налага да се стига до там. Успех!

1
n.velchev95 avatar n.velchev95 79 Точки

Не е ли малко странно че обявите нямат цени? 

0
HPetrov avatar HPetrov 822 Точки

Не е задължително обявите да с покупко-продажбен харахтер. Може например да си направиш обява, че си търсиш съквартирант. Пак е обява ;) Или, че си подаряваш коледните шушони. Но не пречи и да си добавиш и цена в description-а.

2
kasskata avatar kasskata 492 Точки

Това е най-добрия HTML който съм изучавал! :D

Вижте какво му написах и онова взе че ме разбра и го направи! 

<option ng-repeat="town in towns" ng-selected="town.name == ad.townName" ng-init="newDataSelectedAd.townId = town.name == ad.townName?town.id:newDataSelectedAd.townId" value="{{town.id}}">

Това е един ред :D

за категориите е същото

 

2
03/01/2015 21:59:04
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.