AngularJs location path change without all controllers resetting

后端 未结 2 1480
醉酒成梦
醉酒成梦 2021-02-06 06:23

Short version of my question is: How do I change the URL without need to trigger route change or without need to run all the controllers on the currently displayed page?

相关标签:
2条回答
  • 2021-02-06 07:12

    Sounds like you don't want to use $route service.

    The $route service is designed to reload the controllers so that there is no difference between navigating to a URL and refreshing the URL. We do this by doing a full reload on every URL change. This is intentional.

    Sounds like your use case, should not be using $route, just $location and ng-include.

    0 讨论(0)
  • 2021-02-06 07:29

    You can use $locationChangeStart event to store the previous value in $rootScope or in a service. When you come back, just initialize all the previously stored values from the $rootScope. Check this quick demo using $rootScope.

    var app = angular.module("myApp", ["ngRoute"]);
    app.controller("tab1Ctrl", function($scope, $rootScope) {
        if ($rootScope.savedScopes) {
            for (key in $rootScope.savedScopes) {
                $scope[key] = $rootScope.savedScopes[key];
            }
        }
        $scope.$on('$locationChangeStart', function(event, next, current) {
            $rootScope.savedScopes = {
                name: $scope.name,
                age: $scope.age
            };
        });
    });
    app.controller("tab2Ctrl", function($scope) {
        $scope.language = "English";
    });
    app.config(function($routeProvider) {
        $routeProvider
            .when("/", {
                template: "<h2>Tab1 content</h2>Name: <input ng-model='name'/><br/><br/>Age: <input type='number' ng-model='age' /><h4 style='color: red'>Fill the details and click on Tab2</h4>",
                controller: "tab1Ctrl"
            })
            .when("/tab2", {
                template: "<h2>Tab2 content</h2> My language: {{language}}<h4 style='color: red'>Now go back to Tab1</h4>",
                controller: "tab2Ctrl"
            });
    });
    <!DOCTYPE html>
    <html>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
    <body ng-app="myApp">
        <a href="#/!">Tab1</a>
        <a href="#!tab2">Tab2</a>
        <div ng-view></div>
    </body>
    </html>

    0 讨论(0)
提交回复
热议问题