Reputation: 65
I am trying to develop an single page web application using angular js. Now when i click a AddFilm button it redirects to the AddNewFilm.html where a message will be displayed and buttons will be hidden in the current view ,for routing i used the $routeProvider, but the problem is when i manually type the url as http://localhost:8088/fms/#/AddNewFilm it is dispaly the message and also the buttons also.
My question is can we specify the condition in the myApp.config or myApp.controller inorder to route to a url only when an button is clicked.
Welcome.html is
<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Film Management System</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="login.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-app="myApp" background='bg1.JPG'>
<img src='bg.png' width="1270" height="222"/>
<div ng-controller="myCtrl">
<a href="#/AddNewFilm" class="addfilm_buttton button1" ng-click="action.addFilm()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Add film</a>
<a href="#/ModifyFilm" class="modifyfilm_buttton button1" ng-click="action.modifyFilm()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Modify Film</a>
<a href="#/ModifyFilm" class="searchfilm_buttton button1" ng-click="action.searchFilm()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Search Film</a>
<a href="#/ModifyFilm" class="removefilm_buttton button1" ng-click="action.removeFilm()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Remove Film</a>
<a href="#/ModifyFilm" class="viewallfilms_buttton button1" ng-click="action.getAllFilms()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">View All Films</a>
<a href="#/ModifyFilm" class="addactor_buttton button1" ng-click="action.addActor()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Add Actor</a>
<a href="#/ModifyFilm" class="modifyactor_buttton button1" ng-click="action.modifyActor()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Modify Actor</a>
<a href="#/ModifyFilm" class="searchactor_buttton button1" ng-click="action.searchActor()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Search Actor</a>
<a href="#/ModifyFilm" class="removeactor_buttton button1" ng-click="action.removeActor()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Remove Actor</a>
<a href="#/ModifyFilm" class="viewallactors_buttton button1" ng-click="action.getAllActors()" ng-hide="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">View All Actors</a>
<a href="#/" class="show_buttton button1" ng-click="showButtons()" ng-show="action.buttonClicked.addFilm || action.buttonClicked.modifyFilm || action.buttonClicked.searchFilm || action.buttonClicked.removeFilm || action.buttonClicked.getAllFilms || action.buttonClicked.addActor || action.buttonClicked.modifyActor || action.buttonClicked.searchActor || action.buttonClicked.removeActor || action.buttonClicked.getAllActors">Home</a>
<div ng-view></div>
</div>
</body>
</html>
app.js
var myApp = angular.module('myApp', ['ngRoute']);
//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});
myApp.controller('myCtrl', function($scope,$window)
{
$scope.showButtons = function()
{
$scope.action.buttonClicked.addFilm = false
$scope.action.buttonClicked.modifyFilm = false
$scope.action.buttonClicked.searchFilm = false
$scope.action.buttonClicked.removeFilm = false
$scope.action.buttonClicked.getAllFilms = false
$scope.action.buttonClicked.addActor = false
$scope.action.buttonClicked.modifyActor = false
$scope.action.buttonClicked.searchActor = false
$scope.action.buttonClicked.removeActor = false
$scope.action.buttonClicked.getAllActors = false
}
$scope.action =
{
buttonClicked: {},
addFilm: function()
{
$scope.action.buttonClicked.addFilm = true
},
modifyFilm: function()
{
$scope.action.buttonClicked.modifyFilm = true
},
searchFilm: function()
{
$scope.action.buttonClicked.searchFilm = true
},
removeFilm: function()
{
$scope.action.buttonClicked.removeFilm = true
},
getAllFilms: function()
{
$scope.action.buttonClicked.getAllFilms = true
},
addActor: function()
{
$scope.action.buttonClicked.addActor = true
},
modifyActor: function()
{
$scope.action.buttonClicked.modifyActor = true
},
searchActor: function()
{
$scope.action.buttonClicked.searchActor = true
},
removeActor: function()
{
$scope.action.buttonClicked.removeActor = true
},
getAllActors: function()
{
$scope.action.buttonClicked.getAllActors = true
}
}
$scope.message =
{
modifyFilm: 'Hello from ModifyFilm',
addFilm: 'Hello from AddNewFilm',
searchFilm: 'Hello from searchFilm',
removeFilm: 'Hello from removeFilm',
getAllFilms: 'Hello from getAllFilms',
modifyActor: 'Hello from ModifyActor',
addActor: 'Hello from AddNewActor',
searchActor: 'Hello from searchActor',
removeActor: 'Hello from removeActor',
getAllActors: 'Hello from getAllActors'
};
});
myApp.config(function($routeProvider) {
$routeProvider
.when('/AddNewFilm', {
templateUrl : 'AddNewFilm.html',
controller : 'myCtrl'
})
.when('/ModifyFilm', {
templateUrl : 'ModifyFilm.html',
controller : 'myCtrl'
})
.otherwise({redirectTo: '/'});
});
AddNewFilm.html
<div align="center">
<h1>ModifyFilm</h1>
<h3>{{message.addFilm}}</h3>
</div>
can view it at https://plnkr.co/edit/RXkFAw3Z1ehlt8rJZa5W?p=info
Upvotes: 1
Views: 72
Reputation: 3669
Yes, you just need to redirect to main page, when myCtrl
when location is changing and there isn't any clicked button:
myApp.controller('myCtrl', function($scope,$window,$location)
{
// watch for location changing
$scope.$on('$locationChangeStart', function() {
var d = $scope.action.buttonClicked;
// if there isn't any clicked button
if (!Object.keys(d).map(function(k) { return d[k]; }).some(angular.identity)) {
// redirect to main page
$location.url('/');
}
});
...
}
And you shouldn't specify myCtrl
as controller in when
statement. It's wrong.
Upvotes: 1