|
1219 | 1219 |
|
1220 | 1220 | *Зошто?*: Поставување на почетна логика во согласно место во контролерот е полесно за лоцирање, полесно за тестирање и го оневозможува распределувањето на почетната логика низ целиот контролер.
|
1221 | 1221 |
|
1222 |
| - Забелешка: Доколку условно треба да ја спречите патеката пред употреба на контролерот, тогаш решете ја патеката. |
| 1222 | + *Зошто?*: Функцијата `activate` во контролерот е погодна за повторно да се искористи логиката за освежување на контролер/Преглед, ја држи логиката на едно место, побрзо го прикажува Прегледот, ги олеснува анимациите на `ng-view` или `ui-view` и е елегантно за корисникот. |
| 1223 | +
|
| 1224 | + Забелешка: Доколку условно требате да го прекинете решавањето на патеката пред да го користите контролерот, тогаш разгледајте го [route resolve](#style-y081). |
1223 | 1225 |
|
1224 | 1226 | ```javascript
|
1225 | 1227 | /* избегнувајте */
|
|
1257 | 1259 |
|
1258 | 1260 | ### Решавање на патеката преку Promises
|
1259 | 1261 | ###### [Style [Y081](#style-Y081)]
|
1260 |
| - - Кога контролер зависи на решавање на promise, решете ги сите зависности во `$routeProvider` пред логиката на контролерот да биде извршена. Ако треба опционално да ја спречите патеката пред да биде контролерот активиран, решете ја патеката. |
| 1262 | + - Кога контролер зависи на решавање на promise, решете ги сите зависности во `$routeProvider` пред контролерот да биде активиран. Ако треба опционално да ја спречите патеката пред да биде контролерот активиран, решете ја патеката. |
| 1263 | +
|
| 1264 | + - Употребете решавање на патеката кога сакате да ја прекинете патеката пред да преминете на Прегледот. |
1261 | 1265 |
|
1262 | 1266 | *Зошто?*: Контролерот може да зависи од податоци пред да се изврши. Овој податок може да дојде преку promise од сопствена фабрика или [$http](https://docs.angularjs.org/api/ng/service/$http). Со употреба на [route resolve](https://docs.angularjs.org/api/ngRoute/provider/$routeProvider) ќе овозможиме promise да се реши пред логиката на контролерот да биде извршена, така што може да зависи од акција во податокот.
|
1263 | 1267 |
|
| 1268 | + *Зошто?*: Кодот се извршува после патеката и во activate функцијата во контролерот. Прегледот започнува одма да се вчитува. Поврзување со податоците се вклучува кога ќе се реши promise-от во activate функцијата. "Зафатена" анимација ќе се појави додека преминувате на Прегледот. (со ng-view или ui-view) |
| 1269 | +
|
| 1270 | + Забелешка: Кодот се извршува пред патеката со promise. Со одбивање на promise се спречува патеката. Со решавање, се чека на новиот преглед да заврши. "Зафатена" анимација може да се прикаже пред да се реши патеката и во преминот на Прегледот. Доколку сакате побрзо да стигнете до Прегледот, а не ви е потребен checkpoint доколку сакате да стигнете до Прегледот, тогаш разгледајте го [controller `activate` technique](#style-y080). |
| 1271 | +
|
1264 | 1272 | ```javascript
|
1265 | 1273 | /* избегнувајте */
|
1266 | 1274 | angular
|
|
1312 | 1320 | }
|
1313 | 1321 | ```
|
1314 | 1322 |
|
| 1323 | + Забелешка: Примерот подоле покажува како решавање на патеката покажува кон именувана функција, која е полесна за дебагирање и полесно справување со вклучување на зависностите. |
| 1324 | +
|
| 1325 | + ```javascript |
| 1326 | + /* уште подобро */ |
| 1327 | + |
| 1328 | + // route-config.js |
| 1329 | + angular |
| 1330 | + .module('app') |
| 1331 | + .config(config); |
| 1332 | + |
| 1333 | + function config($routeProvider) { |
| 1334 | + $routeProvider |
| 1335 | + .when('/avengers', { |
| 1336 | + templateUrl: 'avengers.html', |
| 1337 | + controller: 'Avengers', |
| 1338 | + controllerAs: 'vm', |
| 1339 | + resolve: { |
| 1340 | + moviesPrepService: moviesPrepService |
| 1341 | + } |
| 1342 | + }); |
| 1343 | + } |
| 1344 | + |
| 1345 | + function moviePrepService(movieService) { |
| 1346 | + return movieService.getMovies(); |
| 1347 | + } |
| 1348 | + |
| 1349 | + // avengers.js |
| 1350 | + angular |
| 1351 | + .module('app') |
| 1352 | + .controller('Avengers', Avengers); |
| 1353 | + |
| 1354 | + Avengers.$inject = ['moviesPrepService']; |
| 1355 | + function Avengers(moviesPrepService) { |
| 1356 | + var vm = this; |
| 1357 | + vm.movies = moviesPrepService.movies; |
| 1358 | + } |
| 1359 | + ``` |
| 1360 | +
|
1315 | 1361 | Забелешка: Примерот на `movieService` не е безбеден за минификација. За детали како да го направите безбеден за минификација, прегледајте ги секциите за [dependency injection](#manual-annotating-for-dependency-injection) и [minification and annotation](#minification-and-annotation).
|
1316 | 1362 |
|
1317 | 1363 | **[Назад кон содржината](#table-of-contents)**
|
|
2430 | 2476 | })();
|
2431 | 2477 | ```
|
2432 | 2478 |
|
| 2479 | +###### [Style [Y241](#style-Y241)] |
| 2480 | + - Употребете константи за вредности кои не се променуваат и не доаѓаат од друг сервис. Кога константи се употребени само за модул кој може повторно да биде искористен во повеќе апликации, потавете ги константите во една датотека за модул именувана како модулот. Се додека ова не е потребно, нека останат константите во главниот модул, во `constants.js` датотеката. |
| 2481 | +
|
| 2482 | + *Зошто?*: Вредност која може да се промени, дури и поретко, треба да биде превземена од сервис со цел да не го менувате изворниот код. На пример, линк до податочниот сервис може да биде поставен во константите, но подобро е да се превземе од веб сервис. |
| 2483 | +
|
| 2484 | + *Зошто?*: Константи можат да бидат вметнати во било која ангулар компонента, вклучувајќи ги провајдерите. |
| 2485 | +
|
| 2486 | + *Зошто?*: Кога апликацијата е поделена во модули кои можат да бидат повторно искористени во други апликации, секој поединечен модул треба да се извршува самостојно вклучувајќи било какви зависни константи. |
| 2487 | +
|
| 2488 | +```javascript |
| 2489 | + // Константи употребени во целата апликација |
| 2490 | +angular |
| 2491 | + .module('app.core') |
| 2492 | + .constant('moment', moment); |
| 2493 | + |
| 2494 | +// Константи употребени само во sales модулот |
| 2495 | +angular |
| 2496 | + .module('app.sales') |
| 2497 | + .constant('events', { |
| 2498 | + ORDER_CREATED: 'event_order_created', |
| 2499 | + INVENTORY_DEPLETED: 'event_inventory_depleted' |
| 2500 | + }); |
| 2501 | +``` |
| 2502 | +
|
2433 | 2503 | **[Назад кон содржината](#table-of-contents)**
|
2434 | 2504 |
|
2435 | 2505 | ## File Templates and Snippets
|
|
0 commit comments