I know it's been asked so many times here and I found it too. But it could not solve my problem. Here is the case. I have one AngularJS application. I have a list page. I have a button to add. When I click on add button, a pop-up window will come with a form. I want to change the URL when the pop-up comes but in the same controller. Also I would like to add some other buttons on each, some html display as popup-or other location, but same controller without reloading all scope when url changes.
What I have tried.
app.js
var WebClientApp = angular.module('WebClientApp', [ 'ngCookies', 'ngResource', 'ngSanitize', 'ui.bootstrap', 'ngRoute' ]); WebClientApp.config(function ($routeProvider) { $routeProvider .when('/groups/:template', { templateUrl: 'groups.html', controller: 'GroupCtrl' } groups.html
<div> <button ng-click="showAdd()">Add Group</button> <div ng-include src="views/listpage.html"> <div ng-if="addGroupModal" class="popup-modal"> <form name="addGroup" ng-submit="addandEditGroup()"> <input type="text" ng-model="group.name"> </form> <div> <div ng-if="editGroupModal" class="popup-modal"> <form name="editGroup" ng-submit="saveGroup()"> <input type="text" ng-model="group.name"> <input type="text" ng-model="group.desc"> <input type="text" ng-model="group.id"> </form> <div> Controllers.js
WebClientApp.controller('GroupCtrl', function ($scope,$http, $location, $routeParams) {
$scope.group = {}; $scope.showAdd=function(){ $location.path('/groups/add'); } var template = $routeParams.template; switch(template){ case 'add': loadAddPage(); break; case 'edit': loadEditPage(); break; default: loadListPageHideAll(); break; } function loadAddPage() { $scope.addGroupModal=true; $scope.editGroupModal=false; } function loadEditPage(){ $scope.addGroupModal=false; $scope.editGroupModal=true; } function loadListPageHideAll() { $scope.addGroupModal=false; $scope.editGroupModal=false; // connect to server and list all groups } $scope.addandEditGroup = function() { $location.path('/groups/edit'); } $scope.saveGroup = function() { // Save group with $scope.group. $location.path('/groups'); } }); When I click on add button, it will show the add form. When I enter group name, and submit, it should show edit form after changing url with the group name filled in the form. But when I try, the value of group object becomes empty since the url is changing. I added the following in controller, but don't know what to do exactly after.
$scope.$on('$routeChangeStart', function(event, present, last) { console.log(event,present,last); }); How to assign the scope variables of last route to present route scope. I tried reload on search to false also, But it didnt work.