AngularJS рдореЗрдВ DRY рд░реВрдЯрд┐рдВрдЧ

рдХреЛрдгреАрдп рдЬреЗрдПрд╕ рдореЗрдВ рд░рд╛рдЙрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп " рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВ " рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред





рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд▓рд╛ рд░реАрд╕реНрдЯ рдХреА рд╢реИрд▓реА рдореЗрдВ URL рдмрдирд╛рдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЯреАрдо рдХреЗ рднреАрддрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╕рдордЭреМрддрд╛ рддрдм рдХрд╛рдо рдЖрдПрдЧрд╛ рдЬрдм рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рдмрдврд╝ рдЬрд╛рдПрдЧреАред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдкрд╢реБ рдЖрд╣рд╛рд░ рдмреЗрдЪрддреА рд╣реИред
рддрдм URL рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
рдлрд╝реАрдб рд╕реВрдЪреА - / #! / рдбреЙрдЧрдлрд╝реВрдб
рдлрд╝реАрдб рдкреГрд╖реНрда - / #! / рдбреЙрдЧрдлрд╝реВрдб /: рдЖрдИрдбреА
рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрдб рдЬрд╛рдирдХрд╛рд░реА - / #! / рдбреЙрдЧрдлрд╝реВрдб /: рдЖрдИрдбреА / рд╡рд┐рд╡рд░рдг

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдкрдХреЛ / # рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ - рддреЛ рдЖрдк рдпрд╣рд╛рдБ рд╣реИрдВ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЕрдЬрд╛рдХреНрд╕ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдПрд╕рдИрдУ-рдорд┐рддреНрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ "рд╕реВрдЦреА" рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреНрдпрд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЙрд░рд▓реЗ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╣ рдкреВрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдпреВрдЖрд░рдПрд▓ рдХреА рд╕реВрдЪреА рдХреЛ .constant рдореЗрдВ рдбрд╛рд▓реЗрдВ ред рдЗрд╕реЗ рд░реВрдЯреНрд╕ рдХрд╣рддреЗ рд╣реИрдВред

.constant('ROUTES', (function () { return { DOGFOODS: '/dogfoods', DOGFOOD: '/dogfood/:id', DOGFOOD_DETAILS: '/dogfood/:id/details' } })()) 


рдЕрдм рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

 .config(['$routeProvider', 'ROUTES', function ($routeProvider, ROUTES) { var pathToIncs = '/pages/'; //,     $routeProvider.when(ROUTES.DOGFOODS, {templateUrl: pathToIncs + 'dogfoods.html', controller: 'dogfoodsCtrl'}); $routeProvider.when(ROUTES.DOGFOOD, {templateUrl: pathToIncs + 'dogfood.html', controller: 'dogfoodCtrl'}); $routeProvider.when(ROUTES.DOGFOOD_DETAILS, {templateUrl: pathToIncs + 'dogfood_details.html', controller: 'dogfoodsDetailsCtrl'}); }]) 


рдареАрдХ рд╣реИ, рдХрд┐ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рдЕрдм рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рд░-рдмрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХрд╛ рдореБрдЦреНрдп рдореЗрдиреВред HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рд╣рдо рдмрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 <a href="ROUTES.DOGFOODS">Dogfoods list</a> 


рдЕрдЪреНрдЫрд╛, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рдЕрдм рд╕рднреА url рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рд╣рд╛рдереЛрдВ рд╕реЗ рдХрдо рдХрд╛рдо рдХрд░реЗрдВред рд╣рд╛рдВ, рдФрд░ рдЖрдИрдбреАрдИ рд╕реЗ рд╕рдорд░реНрдерди рд╣реИред

рдЕрд░реЗ рд╣рд╛рдБ, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХреНрд╖рдгред рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ url рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ rootScope рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ ред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ ospreys рдХрд╛ рд╕рдВрджреВрд╖рдг рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ - рдпреВрдЖрд░рдПрд▓ рд╡рд╣рд╛рдБ рдЬрдЧрд╣ рд╣реИрдВред

рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 .run(['$rootScope', 'ROUTES', function ($rootScope, ROUTES) { $rootScope.ROUTES = ROUTES; }]) 


рдореИрдВ рдЦреБрдж рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рджреЗрддрд╛ рд╣реВрдВ:

 factory('redirectFactory', ['$location', 'ROUTES', function ($location, ROUTES) { return { goDogfoods: function () { $location.path(ROUTES.DOGFOODS); } }; }]) 


рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ - рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдзрд┐рдХрд░рдг, рд▓реЙрдЧрдЖрдЙрдЯ рдЖрджрд┐ рдХреЗ рджреМрд░рд╛рдиред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЕрдВрджрд░ рдХреМрдЖ рдЙрдбрд╝ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рдпрд╣рд╛рдВ рдлрд┐рд▓реНрдЯрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдПрдВрдЧреЗред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рд╡рд╣ рднрд╛рд╖рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ urls рдЬреИрд╕реЗ / #! / Eng / dogfoods рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ред
рд╣рдо рдЕрдкрдиреЗ рд░реВрдЯ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 .constant('ROUTES', (function () { var langParam = '/:lang'; return { DOGFOODS: langParam + '/dogfoods', ... } })()) 


рдПрдХ рдорд╛рд░реНрдЧ рдлрд╝рд┐рд▓реНрдЯрд░ рдмрдирд╛рдПрдБ:

 .filter('routeFilter', ['$filter', function ($filter) { return function (route) { var langParam = '/:lang'; var langVal = '/*   */'; return route.replace(langParam, langParam.replace(langParam, '/' + langVal)); }; }]) 


рдорд╣рд╛рди, рдЕрдм рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

 <a href="/#!{{ROUTES.DOGFOODS | routeFilter}}">Dogfoods list</a> 


рд╕рдЪ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рдлрд┐рд▓реНрдЯрд░ рдХреЛ js рдореЗрдВ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рд╕реЗрд╡рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 .factory('redirectFactory', ['$location', 'ROUTES', '$filter', function ($location, ROUTES, $filter) { var 'routeFilter' = $filter('routeFilter'); return { goDogfoods: function () { $location.path(routeFilter(ROUTES.DOGFOODS)); }, ... }]) 


рд╢рд╛рдпрдж рдпрд╣реА рд╕рдм рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдХреЛрдгреАрдп рдЬреЗрдПрд╕ рдЕрднреА рдЧрд╛рдпрдм рд╣реИ, рд╡реНрдпрдВрдЬрдиреЛрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдкреАрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрд╢рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдЧреБрд▓реНрд▓рдХ рдореЗрдВ рдПрдХ рдФрд░ рдиреБрд╕реНрдЦрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

Source: https://habr.com/ru/post/In190958/


All Articles