Angular.js: рдорд╛рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╢/рдкрде рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП $ рд╕реНрдерд╛рди рдкрд░ рд╡рд┐рдХрд▓реНрдк

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рджрд┐рд╕ре░ 2012  ┬╖  194рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/angular.js

рд╣рдорд╛рд░реЗ рдРрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕реА рдкреГрд╖реНрда рдкрд░ рдирдИ рдЪреАрдЬреЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдЪреАрдЬреЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рддреЛ рд╣рдорд╛рд░рд╛ рдорд╛рд░реНрдЧ /thing/:id рдЬреИрд╕рд╛ рд╣реИред рдПрдХ рдирдИ рдЪреАрдЬрд╝ рдмрдирд╛рддреЗ рд╕рдордп рд╡реЗ /thing/new рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдЪреАрдЬрд╝ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬ рд▓реА рдЬрд╛рддреА рд╣реИ рддреЛ рд╣рдо рдорд╛рд░реНрдЧ рдХреЛ / рдЪреАрдЬрд╝ / 1234 (рдпрд╛ рдЬреЛ рднреА рдЗрд╕рдХреА рдирдИ рдЖрдИрдбреА рд╣реИ) рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдм рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕рдорд╛рди рд╣реИред рд╣рдо рдмрд╕ рдкрде рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдм рд╕рд╣реА рд▓рд┐рдВрдХ рдХреЛ рдмреБрдХрдорд╛рд░реНрдХ рдХрд░ рд╕рдХреЗ, рдЖрджрд┐ред

рдорд╛рд░реНрдЧ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо/рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $ рд╕реНрдерд╛рди (рдорд╛рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдирд╣реАрдВ) рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рд╕реЗ рдХрд╛рдо рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╣реИрдВред

Lots of comments $location ngRoute high confusing feature

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕рдорд╛рдзрд╛рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ $location.path() рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

app.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) {
    var original = $location.path;
    $location.path = function (path, reload) {
        if (reload === false) {
            var lastRoute = $route.current;
            var un = $rootScope.$on('$locationChangeSuccess', function () {
                $route.current = lastRoute;
                un();
            });
        }
        return original.apply($location, [path]);
    };
}]);

рдФрд░ рдлрд┐рд░ рдмрд╕ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ

$location.path('/path/that/you/need', false);

рд╕рднреА 194 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

+1, рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

@cgross рдЪреВрдВрдХрд┐ $ рд╕реНрдерд╛рди рд╕реЗрд╡рд╛

$location.path("/thing/"+thing.id).replace().reload(false)

рдкреАрдПрд╕ рдХреНрдпрд╛ рдпрд╣ рдХреНрд░рд┐рд╕ рдЧреНрд░реЙрд╕ рд╣реИ рдЬрд┐рд╕рдиреЗ рдПрдХреНрд▓рд┐рдкреНрд╕ рдиреЗрдмреБрд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ?

рд╣рд╛рдВ :)

+1: +1:

+1

рдЕрднреА, рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдЬрд╛рдд рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд░реНрдЯреА рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

    $scope.$on('$locationChangeSuccess', function(event) {

        // Want to prevent re-loading when going from /dataEntry/1 to some other dataEntry path
        if ($route && $route.current && $route.current.$route.templateUrl.indexOf('dataEntry') > 0) {
            $route.current = lastRoute; //Does the actual prevention of routing
        }
});

+1

+1

+1

+1

+1

рдпрд╣рд╛рдБ preventDefault() рд▓рд┐рдП $routeChangeStart рд╕рдорд░реНрдерди рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред рддреБрдо рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
рдкреНрд░рддрд┐рдмрджреНрдз: https://github.com/redhotsly/angular.js/commit/f8ac46e6ac9d76cf855077d21b68b4c2c8043db1

рдореИрдВ рдХреБрдЫ рджрд┐рдиреЛрдВ рд╕реЗ @qualidafial рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдм рдкреАрдЖрд░ рддреИрдпрд╛рд░ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдирдИ notify рд╡рд┐рдзрд┐ рдмрдирд╛рдИ рд╣реИ рдЬреЛ рд╕реНрдерд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдкреБрдирдГ рд▓реЛрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд░реВрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдирд╣реАрдВ рдЫреВрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреА рд░реВрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рддрдм рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рдЖрдк рдорд╛рдирдХ AngularJS рд░реВрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрдЬрд╛рдп ui-router рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг: $location.path('/client/2').replace().notify(false);

рдореИрдВрдиреЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрд┐рдЯреНрд╕ рднреА рдХрд╛рдо рдХрд┐рдП рд╣реИрдВред

+1

рдПрдХ рдФрд░ +1
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА @lrlopez 'рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

+1

+1

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдкреАрдЖрд░ https://github.com/angular/angular.js/pull/2398 рдХреЛ рдПрдВрдЧреБрд▓рд░ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ URL рдФрд░ рд╡рд░реНрддрдорд╛рди рдорд╛рд░реНрдЧ рдХреЗ рдмреАрдЪ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд▓рдВрдмреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред

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

+1

+1, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :(

+1

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣рд╛рдВ рдмреЗрд╣рддрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг: https://github.com/angular/angular.js/issues/1699#issuecomment -22511464

рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд╛рд░рдЦрд╛рдирд╛ рдмрдирд╛рдпрд╛ рд╣реИ (@shahmirn рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░):

/**
 * HACK Do not reload the current template if it is not needed.
 *
 * See AngularJS: Change hash and route without completely reloading controller http://stackoverflow.com/questions/12115259/angularjs-change-hash-and-route-without-completely-reloading-controller
 */
app.factory('DoNotReloadCurrentTemplate', ['$route', function($route) {
  return function(scope) {
    var lastRoute = $route.current;
    scope.$on('$locationChangeSuccess', function() {
      if (lastRoute.$$route.templateUrl === $route.current.$$route.templateUrl) {
        console.log('DoNotReloadCurrentTemplate not reloading template: ' + $route.current.$$route.templateUrl);
        $route.current = lastRoute;
      }
    });
  };
}]);

рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:

app.controller('MyCtrl',
  ['$scope', 'DoNotReloadCurrentTemplate',
  function($scope, DoNotReloadCurrentTemplate) {

  DoNotReloadCurrentTemplate($scope);
}]);

рд╕реНрд░реЛрдд: http://stackoverflow.com/a/16496112/990356

рдпрджрд┐ рдЖрдк рдорд╛рд░реНрдЧ рдкрд░ "reloadOnSearch" рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣реИрд╢ рдкрд░рд┐рд╡рд░реНрддрди рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред

+1

рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рдПрдирдЬреА-рд╡реНрдпреВ рдЬреАрд╡рдирдЪрдХреНрд░ рдмрдирд╛рдирд╛/рдирд╖реНрдЯ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ (рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ)ред

@tkrotoff рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЪреВрдВрдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдИрд╡реЗрдВрдЯ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд░рджреНрдж рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░реВрдЯрд╕реНрдХреЛрдк рдкрд░ рдПрдХ рдкреНрд░рд╕рд╛рд░рдг рдЬреЛрдбрд╝рд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдЕрднреА рднреА рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:

/**
 * HACK Do not reload the current template if it is not needed.
 *
 * See AngularJS: Change hash and route without completely reloading controller http://stackoverflow.com/questions/12115259/angularjs-change-hash-and-route-without-completely-reloading-controller
 */
app.factory('DoNotReloadCurrentTemplate', ['$route', '$rootScope', function($route, $rootScope) {
  return function(scope) {
    var lastRoute = $route.current;
    scope.$on('$locationChangeSuccess', function() {
      if (lastRoute.$$route.templateUrl === $route.current.$$route.templateUrl) {
        console.log('DoNotReloadCurrentTemplate not reloading template: ' + $route.current.$$route.templateUrl);
        $rootScope.$broadcast('locationChangedWithoutReload', $route.current);
        $route.current = lastRoute;        
      }
    });
  };
}]);

рдлрд┐рд░:

app.controller('MyCtrl',
  ['$scope', 'DoNotReloadCurrentTemplate',
  function($scope, DoNotReloadCurrentTemplate) {

  DoNotReloadCurrentTemplate($scope);

  $rootScope.$on('locationChangedWithoutReload', function(event, route) {
    // set location specific breadcrumbs
    $scope.breadcrumbs = assembleBreadCrumbs();

    // do something for specific route
    if (route.$$route.action == 'item') {
      $scope.item = $scope.items[params.itemId];
      $rootScope.title = $scope.item.name;
    }
  });
}]);

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╖рдп рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ рд╣реИ рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

app.factory('skipReload', [
    '$route',
    '$rootScope',
    function ($route, $rootScope) {
        return function () {
            var lastRoute = $route.current;
            var un = $rootScope.$on('$locationChangeSuccess', function () {
                $route.current = lastRoute;
                un();
            });
        };
    }
]);

рдЙрдкрдпреЛрдЧ:

app.controller('ThingCtrl', ['$scope', '$http', '$location', 'skipReload', function ($scope, $http, $location, skipReload) {
    ...
    $scope.submit = function () {
        ...
        $http.post('thing', thing).success(function (id) {
            skipReload();
            $location.path('/thing/' + id).replace();
        });
    };
}]);

рд╕реНрдерд╛рдпреА рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд░реВрдЯ рд░реАрд▓реЛрдб рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП рдпрд╛ рдирд╣реАрдВ, рдЙрд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдЯрд┐рдВрдЧ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ/рдЪреАрдЬрд╝/рдирдпрд╛ рдкрд░ рд░реВрдЯ рдХрд┐рдпрд╛ рдФрд░ рджреГрд╢реНрдп рдкрд┐рдЫрд▓реА рдЬреЛрдбрд╝реА рдЧрдИ рдЪреАрдЬрд╝/рдЪреАрдЬрд╝/5 рд╕реЗ рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЪреАрдЬрд╝ 5 рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрджрд▓рдирд╛)ред рдЯреЗрдореНрдкрд▓реЗрдЯ рдпреВрдЖрд░рдПрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд╣реИрдХ рдареАрдХ рдПрдХ рд░реВрдЯ рд░реАрд▓реЛрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВрдиреЗ рдХрдо рд╡рд░реНрдмреЛрдЬрд╝ (рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП) рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:

app.factory('location', [
    '$location',
    '$route',
    '$rootScope',
    function ($location, $route, $rootScope) {
        $location.skipReload = function () {
            var lastRoute = $route.current;
            var un = $rootScope.$on('$locationChangeSuccess', function () {
                $route.current = lastRoute;
                un();
            });
            return $location;
        };
        return $location;
    }
]);
app.controller('ThingCtrl', ['$scope', '$http', 'location', function ($scope, $http, location) {
    ...
    $scope.submit = function () {
        ...
        $http.post('thing', thing).success(function (id) {
            location.skipReload().path('/thing/' + id).replace();
        });
    };
}]);

рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

+1

@sergey-buturlakin рдЖрдкрдХрд╛ $location.skipReload рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИ! рдореИрдВ рдЗрд╕реЗ DoNotReloadCurrentTemplate рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ

@ рд╕рд░реНрдЧреЗрдИ-рдмреНрдпреВрдЯреБрд░рд▓рд╛рдХрд┐рди рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

https://github.com/angular/angular.js/issues/1699#issuecomment -22511464 рд╕реЗ skipReload() рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рдЕрдХреНрд╖рдо рд░рдЦрддрд╛ рд╣реИ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ un() рдмрд╛рдж рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдЧрд▓реЗ рдкреБрдирдГ рд▓реЛрдб рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдФрд░ рдкрде рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдм рдкрде рдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ - "рдЕрди" рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдЧреЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ

+1

+1

+1

рдкреАрдЖрд░ https://github.com/angular/angular.js/pull/2398 рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдмрд╕ рдореБрдЭреЗ рдПрдХ рд▓рд╛рдЗрди рдЫреЛрдбрд╝ рджреЛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

рдореИрдВ рд╕рд░реНрдЧреЗрдИ рдХреЗ рдШреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдмреЗрдХрд╛рд░ (рдореЗрд░реЗ рдЕрдиреБрд╕рд╛рд░) "рдЕрди" рд╡реЗрд░рд┐рдПрдмрд▓ рдФрд░ рдХреЙрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред

рдЗрд╕рд╕реЗ рдпрд╣ рд╣реЛрдЧрд╛:

  angular.module('services.locationChanger', [])
    .service('locationChanger', ['$location', '$route', '$rootScope', function ($location, $route, $rootScope) {

        this.skipReload = function () {
            var lastRoute = $route.current;
            $rootScope.$on('$locationChangeSuccess', function () {
                $route.current = lastRoute;
            });
            return this;
        };

        this.withoutRefresh = function (url, doesReplace) {
            if(doesReplace){
                $location.path(url).replace();
            }
            else {
                $location.path(url || '/');
            }
        };
    }]);

рдФрд░ рдХреЛрдИ рдлреЛрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛:

 locationChanger.skipReload().withoutRefresh("/", true);

+1

+1

+1

+1

@ mica16 рдХреНрдпрд╛ un рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЗрд╡реЗрдВрдЯ рдХреЛ рдЕрдирдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдирдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП un рдЪрд░ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд▓рдВрдХрд░ рдмрдирд╛рдП рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдирд╛ рдмрд╛рд░-рдмрд╛рд░ рдлрд╛рдпрд░рд┐рдВрдЧ рдХрд░рддреА рд░рд╣рддреА рд╣реИ

рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, un рдЪрд░ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред
рдореВрд▓ рд▓реЗрдЦрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛..рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдлреАрдЪрд░ рдХреЛ рдЯреНрд░реИрд╢ рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдФрд░ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред

рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВ рдпрджрд┐ рдЖрдкрдХрд╛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

рддреБрдо рд╕рд╣реА рд╣реЛ рджреЛрд╕реНрддреЛрдВ
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдерд╛

app.factory 'location', ['$location', '$route', '$rootScope', '$timeout', ($location, $route, $rootScope, $timeout) ->
  $location.skipReload = ->
    lastRoute = $route.current
    un = $rootScope.$on('$locationChangeSuccess', ->
      $route.current = lastRoute
    )
    $timeout((->
      un()
    ), 1000)
    $location

  $location
]

рдлрд┐рд░ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ

location.skipReload().path('/new/path').replace()

+1

+1

+1

+1

рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ "рд╕реНрдЯреЗрдк" рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдорд╛рд░реНрдЧ рдХреЛ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рди рд╣реЛред рд╕реНрдерд╛рди:

setTimeout(function() {
    window.location.hash = "";
    if (typeof (history.pushState) !== "undefined") {
        history.pushState("", document.title, location.pathname);
    }
}, 0);

+1

+1

+1

+1

$anchorScroll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореИрдВ рдиреЗрдЯ рдкрд░ рдШреВрдо рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдг рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: http://docs.angularjs.org/api/ngред $рдПрдВрдХрд░рд╕реНрдХреНрд░реЙрд▓

+1

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ? рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдкрде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ред рдЙрдкрдпреЛрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдХреНрд▓реАрдирд░ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕рд░реНрдЧреЗрдИ рдХреА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдирд┐рд░реНрдорд┐рдд $location.path рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрдврд╝рд╛рдпрд╛ред

App.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) {
        var original = $location.path;
        $location.path = function (path, reload) {
            if (reload === false) {
                var lastRoute = $route.current;
                var un = $rootScope.$on('$locationChangeSuccess', function () {
                    $route.current = lastRoute;
                    un();
                });
            }

            return original.apply($location, [path]);
        };
    }])

рдЙрдкрдпреЛрдЧ:

$location.path('/my/path', false);

+1

@EvanWinstanley рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

+1

@ EvanWinstanley/рд╕рд░реНрдЧреЗрдИ рдХрд╛ рдлрд┐рдХреНрд╕ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд░реНрдЧ рдмрджрд▓рддреЗ рд╕рдордп, рд╕рдВрдХрд▓реНрдкреЛрдВ рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ $ location.path рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХрд▓реНрдк/рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреИрд╢рд┐рдВрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЪрдпрди рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХрд╛рдзрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП $ рд╕реНрдерд╛рди.рдкрде рднреА рдмрджрд▓рддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рддреЛ API рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреИрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рднреА, рдпрд╣ рд╣рдореЗрд╢рд╛ рдлрд┐рд░ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреИрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВред

+1

@ рд╕рд░реНрдЧреЗрдИ-рдмреНрдпреВрдЯреБрд░рд▓рд╛рдХрд┐рди рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА reslove рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред

+1

@EvanWinstanley рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░ @ mica16 рдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛... (рдкрд┐рдЫрд▓рд╛ рдмрдЯрди рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА :(ред

+1

+1

+1

+1
рдХреГрдкрдпрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ: $location.reload();

@jvmvik рдХреНрдпрд╛ рдЖрдкрдиреЗ $route.current.reload() рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

7.1.1

рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рдмрд╛рдж рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЦрдмрд░ рдирд╣реАрдВ?

+1

+1

рдореИрдВрдиреЗ рд╕рд░реНрдЧреЗрдИ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рдЕрдм рдпрд╣ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЯреИрдм рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдпреВрдЖрд░рдПрд▓ (рдЯреИрдм рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛)ред

// Original: https://github.com/angular/angular.js/issues/1699#issuecomment-22511464
//
// Usage:
//
// (interception is needed for Back/Forward buttons to work)
//
// location.intercept($scope._url_pattern, function(matched) {
//   // can return false to abort interception
//   var type = matched[1]
//   if (!type) {
//     return;
//   }
//   $scope.safeApply(function() {
//     $scope.data_type = type; 
//     $scope.params.page = 1; 
//     $scope.get_data(); 
//   });
// });
// 
// anywhere in your controller: 
// location.skipReload().path(url);
//
// to replace in history stack:
// location.skipReload().path(url).replace();

app.factory('location', [
    '$location',
    '$route',
    '$rootScope',
    function ($location, $route, $rootScope) {
        var page_route = $route.current;

        $location.skipReload = function () {
            //var lastRoute = $route.current;
            var unbind = $rootScope.$on('$locationChangeSuccess', function () {
                $route.current = page_route;
                unbind();
            });
            return $location;
        };

        if ($location.intercept) {
            throw '$location.intercept is already defined';
        }

        $location.intercept = function(url_pattern, load_url) {

            function parse_path() {
                var match = $location.path().match(url_pattern)
                if (match) {
                    match.shift();
                    return match;
                }
            }

            var unbind = $rootScope.$on("$locationChangeSuccess", function() {
                var matched = parse_path();
                if (!matched || load_url(matched) === false) {
                  return unbind();
                }
                $route.current = page_route;
            });
        };

        return $location;
    }
]);

+1

+1

$ рд╕реНрдерд╛рди рдкрде рдмрджрд▓рддреЗ рд╕рдордп рд░реВрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди, рдирдП рд╕реНрдерд╛рди рдкрде рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдорд╛рд░реНрдЧ рдкрде рдкреИрд░рд╛рдо рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред

рдореЗрд░реЗ $routeProvider рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ /рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдорд╛рд░реНрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ

when('/tasks/:section/:taskId?', {
      templateUrl: 'partials/tasks.html',
      controller: 'TaskCtrl',
      reloadOnSearch: false
      })

рдЙрдкрд░реЛрдХреНрдд рдорд╛рд░реНрдЧ рдореЗрдВ рджреЛ рдкрдердкрд░рдо рдЕрдиреБрднрд╛рдЧ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдп рдЖрдИрдбреА (рдХрд╛рд░реНрдп рдЖрдИрдбреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ) рдФрд░ рдкреБрдирдГ рд▓реЛрдбрдСрдирд╕рд░реНрдЪ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИред

рдорд╛рд░реНрдЧ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ / рдХрд╛рд░реНрдпреЛрдВ / рдЗрдирдмреЙрдХреНрд╕ рд╕реЗ / рдХрд╛рд░реНрдпреЛрдВ / рдЗрдирдмреЙрдХреНрд╕ / 122 рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ $ рд╕реНрдерд╛рди рдкрде рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рдЖрдИрдбреА рдкрдердкрд░рдо рд╕реЗрдЯ рдХрд░реЗрдВ

$scope.showTask = function(task) {
    // set taskId to prevent route reloading
    $route.current.pathParams ['taskId'] = task.id;
    $location.path('/tasks/'+$route.current.pathParams ['section']+'/'+task.id);
};

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЦрдВрдб рдкрдердкрд░рдо рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЬрдм рдорд╛рд░реНрдЧ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдирдП $ рд╕реНрдерд╛рди рдкрде рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдкрдердкрд░рдо рд╡рд░реНрддрдорд╛рди рдорд╛рд░реНрдЧ рдкрдердкрд╛рд░реНрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ (рдФрд░ рдкреБрдирдГ рд▓реЛрдбрдСрдирд╕рд░реНрдЪ рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рддреЛ рдпрд╣ рдорд╛рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ $routeUpdate рдШрдЯрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдорд╛рд░реНрдЧ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛/рдХрд╛рд░реНрдп/рдЗрдирдмреЙрдХреНрд╕/122 рд╕реЗ/рдХрд╛рд░реНрдп/рдЗрдирдмреЙрдХреНрд╕ рдореЗрдВ рд╡рд╛рдкрд╕ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ $ рд╕реНрдерд╛рди рдкрде рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рдЖрдИрдбреА рдкрдердкрд░рдо рд╣рдЯрд╛рдПрдВ

$scope.back = function () {
    // delete taskId to prevent route reloading
    delete $route.current.pathParams ['taskId'];
    $location.path('/tasks/'+$route.current.pathParams ['section']);
};

+1

+:100:

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдмреИрдХрдмреЛрди рд░рд╛рдЙрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрд░рд┐рдХ рдмреЗрд▓реА рд▓реЗрдЦ рдкрдврд╝рд╛ http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/ ? рдмреИрдХрдмреЛрди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрд░рд┐рдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреБрдирдГ рд▓реЛрдб рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдХрд┐ рдХреЛрдгреАрдп рдХреЗ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рд▓рдЧрддрд╛ рд╣реИ)ред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдкрд░ 48 "+1" рд╣реИрдВ ... рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпреЗ рд╕рднреА рд▓реЛрдЧ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖ рд░рд╣рд╛ рд╣реИ var lastRoute = $route.current; рдФрд░ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрд╣рд╛рд▓ $locationChangeSuccess рдХреЗ рд╕рд╛рде $route.current = lastRoute; рд╕реБрдВрджрд░ hacky рд▓рдЧрддрд╛ рд╣реИред
@IgorMinar рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

рдареАрдХ рд╣реИ, рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рд╕реНрд╡рд╛рдореА рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рдХрд░ рд╕рдХреЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЪреАрдЬрд╝реЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ #hash рдорд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдорд╛рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

website.com/#/my-route#top

website.com/#/my-route#bottom

рддреЛ рдЬрдм рд╢реАрд░реНрд╖ рдиреАрдЪреЗ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрджрд┐ рдореЗрд░рд╛ рдорд╛рд░реНрдЧ рдорд╛рди рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рд╣рдо рд╕рдм рдЗрд╕ рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

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

// this will reload the page when the id changes like normal
$routeProvider.register('/users/:id')

// this will reload the page when the id changes, but not the section (since two colons are used)
$routeProvider.register('/users/:id/::section')

рддреБрдо рд▓реЛрдЧ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдк рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

/users/new

рдкреНрд░рддрд┐

/users/123

рдПрдХ рдмрд╛рд░ рдЬрдм рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЖрдИрдбреА рдЕрд╕рд╛рдЗрди рдХреА рдЧрдИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд┐рд╕реА рдХреЛ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдИрдбреА 123 рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдореИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рд╣реИ?

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ рдПрдореНрдмрд░ рд░рд╛рдЙрдЯрд░ рдпрд╛ рддреЛ рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓рддреЗ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

http://stackoverflow.com/questions/19076834/change-url-without-transition

@matsko рдХреНрдпрд╛ рд╣рдо рд╕рд┐рд░реНрдл рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛ рд╕рд╢рдХреНрдд
рдореИрдВ рдЕрдЪреНрдЫреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВред
рдПрдХ рддрд░реАрдХрд╛ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдЗрдВрдЬреАрдирд┐рдпрд░ рд░реАрд▓реЛрдб рдЗрд╡реЗрдВрдЯ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ рдпреВрдЖрд░рдПрд▓ рдмрджрд▓ рд╕рдХреЗред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ (рдЙрджрд╛: {рд░реАрд▓реЛрдб: рдЭреВрдард╛}) ".path()", ".search ()", рдЖрджрд┐ рдкрд░ред

@ChrisCinelli рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдорд╛рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рджреЛ

@matsko рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрдд рдореЗрдВ, рдХреНрдпрд╛ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЪреЗрд░реА-рдкрд┐рдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рдХреМрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ? рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдпрд╛ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдПрдХ рд░реЛрдбрд╝рд╛ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВ?

@cgross рдЪреЗрд░реА-рд╣рд╛рдВ рдЪреБрдиреЗрдВ (рдбрдмрд▓ рдХреЛрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рднреА рдареЛрд╕ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рдХреЛрдгреАрдп 2.0 рдХреА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдирд▓рд╛рдЗрди рд╣реИ рддреЛ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ 2.0 рд╣реЛрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдбрд╛рд░реНрдЯ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ (рдПрдкреАрдЖрдИ рдХреЛ рд╕реБрд╕рдВрдЧрдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реЛрдЧрд╛, рдФрд░ рдорд╛рд░реНрдЧ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ (рдХрдо рд╕реЗ рдХрдо рдЖрдИрдПрдордУ)ред

$routeProvider,when("/:categoryName/:id[reload=no]", { ... })

рдФрд░ рдлрд┐рд░, рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ

$scope.$on("$routeChangeSuccess", function () {
  if ($routeParams.id !== $scope.activeId) {
    // React to ID update without reload
  }
});

рд╣рд╛рдБ рдРрд╕рд╛ рд╣реА рдХреБрдЫ рд╣реИ, рд▓реЗрдХрд┐рди :id[reload=no] рдмрдЬрд╛рдп рдбрдмрд▓ рдХреЛрд▓рди '::id' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВ рд╢рд╛рдпрдж рдЕрдВрддрддрдГ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕реБрдВрджрд░ URL рд╣рдордореЗрдВ рд╕реЗ рдмрд╣реБрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рд╣реИрдВред

рдбрдмрд▓ рдХреЛрд▓рди рдХреЗ рд▓рд┐рдП рдорддреНрд╕рдХреЛ +1, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде() рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛

рдбрдмрд▓ рдХреЛрд▓рди рдХреЗ рд▓рд┐рдП +1

@matsko рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреЛрдгреАрдп 2.0 рдХреЗ рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ ng1.x рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдирдП рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдПрдХ navigate рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ _url_ рдФрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ _options_ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмреИрдХрдмреЛрди рд░рд╛рдЙрдЯрд░ рдХреА рдЗрддрд┐рд╣рд╛рд╕ рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ replace рдФрд░ trigger рдпрджрд┐ рдЖрдк /users/new рд╕реЗ /users/123 рдмрд┐рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╕реНрдХреНрд░реАрди рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдХреЗрд╡рд▓ trigger:false рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ /users/new рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдирдП рдЖрдИрдбреА-рдЖрдзрд╛рд░рд┐рдд url рд╕реЗ рдмрджрд▓ рджреЗ, рддреЛ рдЖрдкрдХреЛ replace:true рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХрд┐рд╕реА _new_ рд░реВрдЯ рд╕реЗ _id-рдЖрдзрд╛рд░рд┐рдд_ рд░реВрдЯ рдореЗрдВ рдмрд┐рдирд╛ DOM рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд┐рдП рд░реВрдЯ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрджрд┐ рдЗрд╕ API рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рд╣реИред рдПрдХ рдФрд░ рдЖрдо рдЙрджрд╛рд╣рд░рдг рдкреЗрдЬрд┐рдиреЗрд╢рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреНрд░рд┐рдб рд╣реИ рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЗрдЬ рдХрд░реЗ, рддреЛ рдЖрдк рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рд╡рд╣реА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдкрд░рд╛рдорд░реНрд╢ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рджреЗрдЦрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдорджрдж рдХрд░рддреА рд╣реИред рд╢рд╛рдпрдж 1.x рд░рд╛рдЙрдЯрд░ рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдЕрдкрдирд╛ рд╕рдХрддрд╛ рд╣реИ?

@EisenbergEffect рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред 1.x рдХреЗ рд▓рд┐рдП, рдкрде рдмрджрд▓реЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

$location.path(value, { trigger : false })

рдФрд░ рдпрд╣ рдирдП рдорд╛рд░реНрдЧ + рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЬрд╛рдЧрд░реВрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкрде рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдбрдмрд▓ :: рдХреЛрд▓рди рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ?

рдпрд╣рд╛рдВ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдпреВрдЖрд░рдПрд▓ рдмрджрд▓рдиреЗ рдкрд░ (рдорд╛рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛) рдпреВрдЖрд░рдПрд▓ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рдпреВрдЖрд░рдПрд▓ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХрд╛ рдПрдХ рдХреЗрдВрджреНрд░реАрдп рд╕реНрд░реЛрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛ
рдорд╛рд░реНрдЧ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреЛрдиреЛрдВ рд╕рдВрджрд░реНрднрд┐рдд рдФрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХрд▓ рд░рд╣рддрд╛ рд╣реИ
рд╕рддреНрдп
рдЬреБрд▓рд╛ 1, 2014 11:28 pm рдкрд░, "рдордЯреАрд╕ Niemel├д" [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @EisenbergEffect https://github.com/EisenbergEffect ред рдХреЗ рд▓рд┐рдпреЗ
1.x, рдкрде рдмрджрд▓реЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

$ рд╕реНрдерд╛рдиред рдкрде (рдорд╛рди, {рдЯреНрд░рд┐рдЧрд░: рдЭреВрдард╛})

рдФрд░ рдпрд╣ рдирдП рдорд╛рд░реНрдЧ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдкрде рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛

  • рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХред рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
    рдбрдмрд▓ :: рдХреЛрд▓рди рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ?

рдпрд╣рд╛рдВ рдЕрдиреНрдп рд╕рднреА рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп URL рдмрджрд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ (рдмрд┐рдирд╛
рдорд╛рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛) рдорд╛рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЧрдо рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдпреВрдЖрд░рдПрд▓ рдХрдм рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/angular/angular.js/issues/1699#issuecomment -47741350ред

рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ... рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рджреЛ рдирдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ, рдЬреИрд╕реЗ entering(transitionInfo) рдФрд░ leaving(transitionInfo) рдпрд╛ рдХреБрдЫ рдФрд░ред рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ рддреЛ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреБрд░рд╛рдиреЗ рдорд╛рд░реНрдЧ рдкрд░ leaving рдкрджреНрдзрддрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдирдП рдорд╛рд░реНрдЧ рдкрд░ entering() рдкрджреНрдзрддрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред transitionInfo рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реЛрдЧреА рдЬреЛ рдирд┐рдореНрди рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

{
  newUrl: ...
  newRoute: ...
  oldUrl: ...
  oldRoute: ...
  cancelRouteChange: false,
  ignoreRouteChange: false
}

рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╣рдо рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдорд╛рд░реНрдЧреЛрдВ/рдпреВрдЖрд░рдПрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдЖрд░рдПрд▓ рдмрджрд▓ рдЬрд╛рдП рд▓реЗрдХрд┐рди рдорд╛рд░реНрдЧ рд╕рдВрдХреНрд░рдордг рдХреЛ рдлрд┐рд░ рд╕реЗ рди рдЪрд▓рд╛рдП рддреЛ рдЖрдк ignoreRouteChange рд╕реЗ true ред рдпрджрд┐ рдЖрдк рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд░рджреНрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рдорд╛рд░реНрдЧ рдкрд░ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдиреЗ cancelRouteChange рдХреЛ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдпрд╣ рддрдм рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд╕реАрдзреЗ рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рд░реНрдЧреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдХрд░реАрдм рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред .

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ AngularV2 рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╣реИ рдЬрд┐рд╕реЗ activate() рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред @EisenbergEffect рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

@matsko рд╣рд╛рдБ, рд╡рд╣ рдПрдкреАрдЖрдИ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред рдЖрдк replace рд╡рд┐рдХрд▓реНрдк рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреА рд╣реЛрддреА рд╣реИред /users/new рд╕реЗ /users/123 рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ /users/new рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рдмреИрдХ рд╕реНрдЯреИрдХ рдореЗрдВ рд░рд╣реЗред рдмрдирд╛рдпрд╛ рдерд╛ред

:: рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐, рдКрдкрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ url рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрджрд░реНрдн рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк customers рд╕реЗ users/123 рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдпрджрд┐ рдЖрдк users/new рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ users/456 рддреЛ рдЖрдк рднреА рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдЬрдм рдЖрдк users/new рдФрд░ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХреНрд░рдордг рдХреЗ рдирдП рдмрдирд╛рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрдИрдбреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЙрд╕ рд╕рдордп рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред

@petebacondarwin рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рднрддреНрддреЗ рдХрд╛ рдЬреНрдЮрд╛рди рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдорд╛рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рднреАрддрд░ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдмрд╕ рдирдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реАрди рд╕реЗ рдкреВрд░реНрд╡-рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдХ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЙрд╕ рдХреЙрд▓рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рджреЗрдирд╛ рд╣реИ рдЬреЛ рдорд╛рд░реНрдЧ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ replace рдФрд░ trigger рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

@EisenbergEffect - рдЖрдк рд╕рд╣реА рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рддреБрд░рдВрдд рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реВрдВрдЧрд╛:

currentUser рдирд╛рдордХ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реВрдВред рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ currentEntity , рдЬреЛ рдХрд┐ рд╡рд░реНрддрдорд╛рди "рдЪреАрдЬ" рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рдВрдкрд╛рджрд┐рдд/рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

рдлрд┐рд░ рдорд╛рд░реНрдЧ enter() рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреА рдФрд░ рдпрд╣ рддрдп рдХрд░реЗрдЧреА рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдорд╛рд░реНрдЧ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЗрдХрд╛рдИ рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рддреЗ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрд╕ URL рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрдбрд╝реЗ рдРрдк рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмреЛрдЭрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╣рд╛рдВ рдлреЗрдВрдХ рджреВрдВрдЧрд╛ред

рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ (рдЕрд░реНрдерд╛рдд рдорд╛рд░реНрдЧ/рдпреВрдЖрд░рдПрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛) рджреЗрдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреНрдпрд╛ рддрд░реНрдХ рд╣реИрдВ рдХрд┐ рдорд╛рд░реНрдЧ рд╕рдВрдХреНрд░рдордг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ @IgorMinar рдЪрд┐рдВрддрд┐рдд рдерд╛ рдХрд┐ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереАред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪреЗред

@petebacondarwin рдЬреЛ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП

рд░рд╛рдЬреНрдп рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдпреВрдЖрд░рдПрд▓ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ .... рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдореЙрдбрд▓ рдореЗрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рд╕реНрдерд╛рдПрдБ рд╣реИрдВ....рд▓реЗрдХрд┐рди UX рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЭрдЯрдХрд╛ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдкреВрд░реНрдг рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ, рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдбреЛрдо рдХреЛ рдлреЗрдВрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ => рд╕рд╣реЗрдЬреЗ рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдХреНрд░рдордг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдХреЛ рднреА рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмреИрдХ рдмрдЯрди _not_ рдЖрдкрдХреЛ рдирдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рдПред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рд░рд╛рдЙрдЯрд░ рдпрд╛ рд╕реНрдерд╛рди рддрдВрддреНрд░ рдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝рд╛ рдХреНрдпрд╛ рд╣реИред (рдореИрдВ рд╡рд╣рд╛рдВ рдПрдХ рдзрд╛рд░рдгрд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ ng1.x рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред 2.x рдХреЗ рд╕рд╛рде рд╣рдо рд╡рд░реНрддрдорд╛рди/рдкрд┐рдЫрд▓реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реЛред) рдореЗрдВ рдкреЗрдЬрд┐рдиреЗрд╢рди рдкрд░рд┐рджреГрд╢реНрдп, рд╣рдо рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЗрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдпреВрдПрдХреНрд╕ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЛрдо рдирд┐рдкрдЯрд╛рди рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдкрд┐рдЫрд▓реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрди рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ url рдФрд░ рдРрдк рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЙрд╕ рдирдП рд░рд╛рдЬреНрдп рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдирдП рджреГрд╢реНрдп рд╕реЗ рдбреАрдк рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдЬрдм рдЖрдк рдЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реЛрдВред

+1

+1

+1

+1
рдФрд░ рдмрд┐рдирд╛ рд░реВрдЯ рдмрджрд▓реЗ рдпреВрдЖрд░рдПрд▓ рдмрджрд▓рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рднреА рд╣реИ

+1 - рдпрд╣ рджреЗрдЦрдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдВ рдЬреЛ рдпрд╣ рдЪрд╛рд╣рддрд╛ рд╣реИ!

+1, рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ (

+1

+1

+1

+1

+1

+1

+1

:+1:

рдЖрдк рднреА @basarat? :рдореБрд╕реНрдХреБрд░рд╛рдУ:

@johnnyreilly рдХреЗ рдкрд╛рд╕ рдмрд╕ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк $route рдФрд░ $location рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

/** navigate */
    public navigate(url: string, reload = true) {
        this.$location.url(url);

        // Don't do a controller reload on this navigation. Note: *you* need to be careful not to actually *need* a controller reload
        if (!reload) {
            var lastRoute = this.$route.current;
            var unsub = this.$rootScope.$on('$locationChangeSuccess', () => {
                this.$route.current = lastRoute; // fake this to make the route logic think nothing changed
                unsub();
            });
        }
    }

рдЕрдЪреНрдЫрд╛ @рдмрд╕рд░рдд!

+1

+1

рдПрдХ рдмрд╛рдд рдЬреЛ рдореИрдВ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд░рд╛рдЙрдЯрд░ рд╕рдорд╛рдзрд╛рди рдмреНрд▓реЙрдХ рдЕрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рдФрд░ рдиреЗ рдЗрд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд┐рдпрд╛? $route.current рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдкрд╛рд╕ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИрдХреА рд▓рдЧрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрднреА рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧреА? :рд░реЛрдирд╛:

+1

+1

рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ... рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП 100% рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЕрдкрдирд╛ resolve рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдмреИрдХ/рдлреЙрд░рд╡рд░реНрдб рдмрдЯрди рдЕрдм рдЯреВрдЯрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

#
# Special $location.path function that allows you to change the url, but not
# send things through the router.
# <strong i="7">@see</strong> https://github.com/angular/angular.js/issues/1699
#
@app.run(['$rootScope', '$location', '$route', '$timeout', ($rootScope, $location, $route, $timeout) ->

    originalPath = $location.path

    $location.path = (url, reload=true) ->
        if ! reload
            lastRoute = $route.current
            if lastRoute
                unsub = $rootScope.$on('$locationChangeSuccess', ->
                    $route.current = lastRoute # fake this to make the route logic think nothing changed
                    $route.current.ignore = true
                    unsub()
                )
                # make sure to clean up and unregister the unsub function
                $timeout( ->
                    unsub()
                , 500)

        originalPath.apply($location, [url])

])

@lookfirst рдЖрдк unsub рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдкрд╕рдВрдж рдХрд░реЗрдВ: https://github.com/angular/angular.js/issues/1699#issuecomment -54931571

@basarat shrug ... рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓ рд░рд╣рд╛ рдерд╛ рдХрд┐ unsub() рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдирд╕рдм рдлрдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЧрд╛рд░реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред

unsubbed = false
unsub = ... ->
    if ! unsubbed
        ...
        unsubbed = true
        unsub()

$timeout(unsub, 500)

рднрд▓реЗ рд╣реА, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреБрд▓ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдпрд╣ рд╣рд░ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреЛрдгреАрдп рд╕реНрд╡реАрдХреГрдд рдлрд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ unsub() рдХреЛ рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛

@lookfirst рдЖрдк location.path рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдореИрдВ location.url рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрд╕рд░ рд╣реЛред

рдмрд╕ рдирд╛рдЗрдЯрдкрд┐рдХрд┐рдВрдЧ (рдореБрдЭреЗ рдорджрджрдЧрд╛рд░ рдмрдирдирд╛ рдкрд╕рдВрдж рд╣реИ): originalPath.apply($location, [url]) рдмрдЬрд╛рдп рдЖрдк originalPath.call($location, url) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗ)

рджрд┐рд▓рдЪрд╕реНрдк... location.url рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдмреИрдХ рдмрдЯрди рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЬрдм рдореИрдВ рд╕реАрдзреЗ 10 рдШрдВрдЯреЗ рддрдХ рдХреЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЦреБрджрд╛рдИ рдХрд░рдиреА рд╣реЛрдЧреАред рд╕рдВрдХреЗрдд рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ!

+1

+1

+1

@kuchumovn рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдореБрдЭреЗ рдорд┐рд▓реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрде рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж $routeParams рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ $routeParams рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

app.factory('Location', [
    '$location',
    '$route',
    '$rootScope',
    '$routeParams',
    function ($location, $route, $rootScope, $routeParams) {
        var page_route = $route.current;

        $location.skipReload = function () {
            //var lastRoute = $route.current;
            var unbind = $rootScope.$on('$locationChangeSuccess', function () {
                angular.copy($route.current.params, $routeParams);
                $route.current = page_route;
                unbind();
            });
            return $location;
        };

        if ($location.intercept) {
            throw '$location.intercept is already defined';
        }

        $location.intercept = function(url_pattern, load_url) {

            function parse_path() {
                var match = $location.path().match(url_pattern);
                if (match) {
                    match.shift();
                    return match;
                }
            }

            var unbind = $rootScope.$on("$locationChangeSuccess", function() {
                var matched = parse_path();
                if (!matched || load_url(matched) === false) {
                  return unbind();
                }
                angular.copy($route.current.params, $routeParams);
                $route.current = page_route;
            });
        };

        return $location;
    }
]);

+1

+1

рдореИрдВрдиреЗ рдХрд▓ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ @IgorMinar рд╕реЗ рдмрд╛рдд рдХреА ... рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЛрдгреАрдп 2.0 рдореЗрдВ рд░рд╛рдЙрдЯрд░ рд╣реИ, рдЬреЛ рдЬрд▓реНрдж рд╣реА 1.3 рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ...

рдЖрдк рд╕рд┐рд░реНрдл ui- рд░рд╛рдЙрдЯрд░ рдХреЛ рдХреЛрдгреАрдп рдореЗрдВ рдХреНрдпреЛрдВ рдорд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреВрдпреВрдЖрдИ рд░рд╛рдЙрдЯрд░ рдХреБрдЫ рднреА рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@elennaro рд╕реЗ рд╕рд╣рдордд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреВрдЖрдИ-рд░рд╛рдЙрдЯрд░ рдХреБрдЫ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдЪрд╛рд▓ рдЪрд▓рддрд╛ рд╣реИред рдЬрд┐рдЬреНрдЮрд╛рд╕реБ: рдпреВрдЖрдИ-рд░рд╛рдЙрдЯрд░ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ Google рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдХреНрдпрд╛ рдиреБрдХрд╕рд╛рди рд╣реИрдВ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рд╕рдВрдХрд▓реНрдк рдкрд░ рдЕрдорд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

+1

+1

$location.path(value, { trigger : false }) рд▓рд┐рдП +1
рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐?

+1

+1

+1 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдкрде() рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдФрд░ рдХреЗрд╡рд▓ $ location.hash рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХ рд░реАрд▓реЛрдб рдХреЗ рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмреИрдХ-рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рдореГрджреНрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╡реИрдз рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИред

+1

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рдкреГрд╖реНрда рдореЗрдВ рдпрд╣рд╛рдВ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: http://joelsaupe.com/programming/angularjs-change-path-without-reloading/

+1

+1

+1

рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд▓ рд░рд╛рдЬреНрдп рдЬреЛрдбрд╝рдирд╛ рдерд╛ред

$stateProvider.state('state.child', {
    url: '^/some-other-url'
});

рдлрд┐рд░ рдмрд╕ $state.go('.child') рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ url рдХреЛ рдЙрд╕ рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЖрдк рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХреЛ рдЦреБрд╢ рд░рдЦреЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд░реЗрдЯ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпреВрдЖрд░рдПрд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рд▓рдЧ рдЧрдИред

+1

+1

+1

+1

+1

+1

+1

@btford componentRouter рдореЗрдВ рдЗрд╕рд╕реЗ (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА) рдХреИрд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдПрдХ рд╕рд░рд▓, рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @balsarori ред

рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ $route рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдКрдкрд░ рд╡рд┐рд╕реНрддреГрддред

рдпрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ console.log рдХреЗ рдмрдЬрд╛рдп $log рд╣рдо рдмрд╕ рд╕рдм рд▓реЙрдЧ рдкрдЯреНрдЯреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрд╛рджрди uglifyjs рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдПред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдареАрдХ

/**
 * parameter handling
 */

'use strict';

angular.module('route-params', [
  'ng',
  'ngRoute',
])
.service('routeParams', function(
  $route,
  $location
) {
  var R = {};

  /**
   * <strong i="15">@ngdoc</strong> method
   * <strong i="16">@name</strong> routeParams#replace
   *
   * <strong i="17">@description</strong>
   * Replace route params, including path params, without reloading controller.
   *
   * Causes `$route` service to update the current URL, replacing
   * current route parameters with those specified in `params`.
   *
   * Provided property names that match the route's path segment
   * definitions will be interpolated into the location's path, while
   * remaining properties will be treated as query params.
   *
   * If `options.reload` is truthy, the current controller is reloaded.
   *
   * If `options.history` is truthy, the browser history is updated.
   * If `options.history` is undefined, the browser history is only updated
   * when changing value of any existing `$route` parameter,
   * ie. not when adding a previously undefined `$route` parameter.
   *
   * <strong i="18">@param</strong> {!Object<string, string>} params mapping of URL parameter names to values
   * <strong i="19">@param</strong> {!Object<string, boolean>} options `history` and `reload` options.
   *
   * <strong i="20">@returns</strong> {Object} self
   */
  R.replace = function(params, options) {
    var key, value, updateRequired;
    options = options || {};

    // Convert params to strings, and check if they differ from current route params.
    // If `options.history` is undefined, and passed params update any current route params, then set it to true.
    var currentParams = $route.current.params;

    console.log('route: params: replace', {last: angular.copy(currentParams), next: params,
      route: $route.current, options: options});

    if (!$route.current.$$route) {
      // Can't change location.
      return;
    }
    var currentPath = $route.current.$$route.originalPath;
    var history = options.history;

    for (key in params) {
      // jshint eqnull: true
      value = params[key] = (params[key] == null ? undefined : params[key] + '');

      if (value !== currentParams[key]) {
        updateRequired = true;

        console.log('route: params: replace: ' + (currentPath.search(':\\b' + key + '\\b') ? 'path.' : 'search.') +
          key + ' = ' + (key in $route.current.params ? $route.current.params[key] + ' -> ' : '') + params[key]);

        if (history === undefined && key in currentParams) {
          console.log('route: params: replace: update history: ' + key + ' = ' + currentParams[key] + ' -> ' + value);
          history = true;
        }
      }
    }

    if (updateRequired) {
      // If `options.reload` is falsey, then set current route `reloadOnSearch` to false,
      // and make passed path params equal with current route path params,
      // so that `$route` treats the change as update only, and does not broadcast `$routeChangeStart` event.
      //
      // See https://github.com/angular/angular.js/issues/1699#issuecomment-45048054
      // and https://github.com/angular/angular.js/tree/v1.3.x/src/ngRoute/route.js#L484
      // and https://github.com/angular/angular.js/tree/v1.3.x/src/ngRoute/route.js#L539
      if (!options.reload) {
        // Set current route `reloadOnSearch` to false.
        $route.current.$$route.reloadOnSearch = false;

        // Add any passed path params to current route path params, and convert them to strings.
        // Path params are detected by searching for respective name group `:key[*?]` in current route path.
        for (key in params) {
          if (currentPath.search(':\\b' + key + '\\b') !== -1) {
            $route.current.pathParams[key] = params[key];
          }
        }

        // Add any current route path params to passed params, if not set there already.
        for (key in $route.current.pathParams) {
          if (!(key in params)) {
            params[key] = $route.current.pathParams[key];
          }
        }

        // TODO: push state if `options.history` is truthy.
      }
      // If `options.history` is falsey, and controller is reloaded,
      // then make `$location` replace current history state, instead of pushing a new one.
      else if (!history) {
        $location.replace();
      }

      $route.updateParams(params);

      // Update current route params, so the change is reflected immediatelly,
      // and nearby replace() call work correctly.
      for (key in params) {
        $route.current.params[key] = params[key];
      }
    }

    return R;
  };

  return R;
});

рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдирдП рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛? 1.4 рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░? рдЬрд▓реНрдж рд╣реА?

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рдеред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рддреЗ рд╕рдордп рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ reloadOnSearch рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП! :)

рдзрдиреНрдпрд╡рд╛рдж!

@marcalj fwiw, рд╣рдордиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд╣реИрдХ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрд╛ рддрд╛рдХрд┐ рд╣рдо reloadOnSearch рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рд╕рд╛рде рд╣реА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд╕реАрдзреЗ рдмреБрдХрдорд╛рд░реНрдХ рдпрд╛ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдирдЬреА-рд░рд╛рдЙрдЯрд░ рдпрд╛ рдпреВрдЖрдИ-рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде? рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдХреЛрдб рдпрд╛ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдирдП рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж!

@marcalj рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рд╕рдВрднрд╡рдд: рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди https://github.com/irthos/mngr/blob/master/app.js рджреЗрдЦреЗрдВ рдФрд░ рд▓рд╛рдЗрди 10 рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдпрд╣ рд╣рдорд╛рд░реА api.loadState рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреИрд░рд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ url рдЙрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

NgSilent рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдерд╛ред
рджреЗрдЦреЗрдВ https://github.com/garakh/ngSilent
ngRoute 1.3.15 . рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛

рдореИрдВрдиреЗ @ рд╕рд░реНрдЧреЗрдИ-рдмреНрдпреВрдЯреБрд░рд▓рд╛рдХрд┐рди рдФрд░ @kuchumovn рд╕рдорд╛рдзрд╛рди рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдкрд░ рдЪрд▓рддрд╛ рд╣реВрдВред

рдкреНрд░рд╢реНрди рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдкрд░ (рдкреЗрдЬрдПрдХреНрд╕) рдореИрдВ рд╕реНрдерд╛рди.рд╕реНрдХрд┐рдк рд░реАрд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореИрдВ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рдкрде рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрджрд┐ рдореИрдВ рдкреЗрдЬрдПрдХреНрд╕ рд╕реЗ рдирдП рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдорд╛рд░реНрдЧ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ $ рд╕реНрдерд╛рди.рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдкреЗрдЬрдПрдХреНрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХ рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЕрдм рдФрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдм рдореЗрд░рд╛ рдорд╛рд░реНрдЧ рдмрджрд▓реЗрдВред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИ?

+1

+1ред рдореБрдЭреЗ рдбрдмрд▓ рдХреЛрд▓рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ рдЬреЛ рдорддрд┐рдпрд╛рд╕ рдиреЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛

+1

рдкрде рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдРрдк рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ,
рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдХреЛрдгреАрдп рд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬреБрдбрд╝рд╛ рд╣реИред
@EvanWinstanley рд╕рдорд╛рдзрд╛рди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛:
https://github.com/anglibs/angular-location-update

рдЖрдЗрдП рдЗрд╕реЗ 1.5 рдореЗрдВ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред #5860 . рдкрд░ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдкреАрдЖрд░ рд╣реИ

рдореБрдЭреЗ рд░реВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! :)

рдХреБрдЫ рдЗрд╕ рддрд░рд╣: $location.searchSilent('sf', SearchFilter.getForRouteParams());

$ рд╕реНрдерд╛рди.рдкрде (href);
рдЧреБрдВрдЬрд╛рдЗрд╢ред $ рд▓рд╛рдЧреВ ();
рд╕рдорд╛рдзрд╛рди рд╣реИ !!
рд╣рдореЗрдВ $apply() рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХреЛрдгреАрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдпрд╣ рдзрд╛рдЧрд╛ 2 рд╕рд╛рд▓ рд╕реЗ рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдгреАрдп рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд╣рдо рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛ рдорд╛рд░реНрдЧ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

@petebacondarwin рдмрд┐рдирд╛ рд░реАрд▓реЛрдб рдХреЗ рди рдХреЗрд╡рд▓ рд▓реЛрдХреЗрд╢рди рдкрд╛рде рдЕрдкрдбреЗрдЯ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдмрд▓реНрдХрд┐ рдмрд┐рдирд╛ рд░реАрд▓реЛрдб рдХреЗ рдкрд╛рде рдкреИрд░рд╛ рдЕрдкрдбреЗрдЯ рднреА ... рдЬреИрд╕реЗ https://github.com/angular/angular.js/issues/1699#issuecomment -96126887 рдКрдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

@jicasada рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж!

@jicasada рдпрд╣ dOnSearch:false рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз рдкрд░рдо рдХреЗ рд╕рд╛рде рдмрд╛рд▓ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореВрд▓ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рджреЛ рдмрд╛рд░ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред

+1

+1

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдирдЬреАрд╕рд╛рдЗрд▓реЗрдВрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рднреА рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред

рд╕рдорд╛рдзрд╛рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ $location.path() рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

app.run(['$route', '$rootScope', '$location', function ($route, $rootScope, $location) {
    var original = $location.path;
    $location.path = function (path, reload) {
        if (reload === false) {
            var lastRoute = $route.current;
            var un = $rootScope.$on('$locationChangeSuccess', function () {
                $route.current = lastRoute;
                un();
            });
        }
        return original.apply($location, [path]);
    };
}]);

рдФрд░ рдлрд┐рд░ рдмрд╕ рдЗрд╕ рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ

$location.path('/path/that/you/need', false);

рдореБрдЭреЗ рдмрд╕ $ location.replace рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП () рдмрд┐рд▓реНрдХреБрд▓ window.location.replace рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ред рдпрд╣ рд╕рд┐рд░реНрдл рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдЖрд░рдпреВрдбреА рдСрдкрд░реЗрд╢рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдПрдЯ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред

(рдФрд░) +1

+1

рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ "рдЦреЛрдЬ рдкрд░рдо" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
/thing?id=1234
рд░рд╛рдЙрдЯрд░ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдкрд░рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рди рдХрд░реЗрдВ, рдпрд╣ рджреГрд╢реНрдп рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЕрдЧрд░ рдЖрдк id . рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
$location.search().id //1234
@cgross

рдбреЗрдореЛ http://codepen.io/dolymood/details/jrEQBx/
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП decorator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ngViewDirective

+1

+1

+1

+1

+1

+1

+!

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд +1 :-)
рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХреНрд░рд┐рд╕рдорд╕ рд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦреЗрдВрдЧреЗ!

# 15002 рджреНрд╡рд╛рд░рд╛ рдмрдВрджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

kishanmundha picture kishanmundha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ashish91 picture ashish91  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

WesleyKapow picture WesleyKapow  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cmplank picture cmplank  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jetta20162 picture jetta20162  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ