Как перенаправить на другую страницу с помощью Angular JS?
Я использую вызов ajax для выполнения функций в файле службы, и если ответ удался, я хочу перенаправить страницу на другой URL-адрес. В настоящее время я делаю это, используя простой js "window.location = response ['message'];". Но мне нужно заменить его кодом angularjs. Я смотрел различные решения в stackoverflow, они использовали $location. Но я новичок в angular и не могу его реализовать.
$http({
url: RootURL+'app-code/common.service.php',
method: "POST",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
dataType: 'json',
data:data + '&method=signin'
}).success(function (response) {
console.log(response);
if (response['code'] == '420') {
$scope.message = response['message'];
$scope.loginPassword = '';
}
else if (response['code'] != '200'){
$scope.message = response['message'];
$scope.loginPassword = '';
}
else {
window.location = response['message'];
}
// $scope.users = data.users; // assign $scope.persons here as promise is resolved here
})
Ответы
Ответ 1
Вы можете использовать Angular $window
:
$window.location.href = '/index.html';
Пример использования в contoller:
(function () {
'use strict';
angular
.module('app')
.controller('LoginCtrl', LoginCtrl);
LoginCtrl.$inject = ['$window', 'loginSrv', 'notify'];
function LoginCtrl($window, loginSrv, notify) {
/* jshint validthis:true */
var vm = this;
vm.validateUser = function () {
loginSrv.validateLogin(vm.username, vm.password).then(function (data) {
if (data.isValidUser) {
$window.location.href = '/index.html';
}
else
alert('Login incorrect');
});
}
}
})();
Ответ 2
Вы можете перенаправить на новый URL по-разному.
- Вы можете использовать $window, который также обновит страницу
- Вы можете "остаться внутри" приложения с одной страницей и использовать $location, и в этом случае вы можете выбрать между
$location.path(YOUR_URL);
или $location.url(YOUR_URL);
. Таким образом, основная разница между двумя методами заключается в том, что $location.url()
также влияет на параметры получения, тогда как $location.path()
не работает.
Я бы рекомендовал прочитать документы на $location
и $window
, чтобы вы лучше понимали различия между ними.
Ответ 3
$location.path('/configuration/streaming');
это будет работать...
ввести службу определения местоположения в контроллер
Ответ 4
Это может помочь вам!
Пример кода AngularJs
var app = angular.module('app', ['ui.router']);
app.config(function($stateProvider, $urlRouterProvider) {
// For any unmatched url, send to /index
$urlRouterProvider.otherwise("/login");
$stateProvider
.state('login', {
url: "/login",
templateUrl: "login.html",
controller: "LoginCheckController"
})
.state('SuccessPage', {
url: "/SuccessPage",
templateUrl: "SuccessPage.html",
//controller: "LoginCheckController"
});
});
app.controller('LoginCheckController', ['$scope', '$location', LoginCheckController]);
function LoginCheckController($scope, $location) {
$scope.users = [{
UserName: 'chandra',
Password: 'hello'
}, {
UserName: 'Harish',
Password: 'hi'
}, {
UserName: 'Chinthu',
Password: 'hi'
}];
$scope.LoginCheck = function() {
$location.path("SuccessPage");
};
$scope.go = function(path) {
$location.path("/SuccessPage");
};
}
Ответ 5
Я использовал приведенный ниже код для перенаправления на новую страницу
$window.location.href = '/foldername/page.html';
и вложенный объект $window в моей функции контроллера.
Ответ 6
Хороший способ сделать это - использовать $state.go('statename', {params...}) быстрее и удобнее для пользователей в случаях, когда вам не нужно перезагружать и загружать всю конфигурацию приложения и прочее
(function() {
'use strict';
angular
.module('app.appcode')
.controller('YourController', YourController);
YourController.$inject = ['rootURL', '$scope', '$state', '$http'];
function YourController(rootURL, $scope, $state, $http) {
$http({
url: rootURL + 'app-code/common.service.php',
method: "POST",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
dataType: 'json',
data:data + '&method=signin'
}).success(function (response) {
if (response['code'] == '420') {
$scope.message = response['message'];
$scope.loginPassword = '';
} else if (response['code'] != '200') {
$scope.message = response['message'];
$scope.loginPassword = '';
} else {
// $state.go('home'); // select here the route that you want to redirect
$state.go(response['state']); // response['state'] should be a route on your app.routes
}
})
}
});
//маршруты
(function() {
'use strict';
angular
.module('app')
.config(routes);
routes.$inject = [
'$stateProvider',
'$urlRouterProvider'
];
function routes($stateProvider, $urlRouterProvider) {
/**
* Default path for any unmatched url
*/
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home', {
url: '/',
templateUrl: '/app/home/home.html',
controller: 'Home'
})
.state('login', {
url: '/login',
templateUrl: '/app/login/login.html',
controller: 'YourController'
})
// ... more routes .state
}
})();
Ответ 7
Простым способом я использую
app.controller("Back2Square1Controller", function($scope, $location) {
window.location.assign(basePath + "/index.html");
});
Ответ 8
(function () {
"use strict";
angular.module("myApp")
.controller("LoginCtrl", LoginCtrl);
function LoginCtrl($scope, $log, loginSrv, notify) {
$scope.validateUser = function () {
loginSrv.validateLogin($scope.username, $scope.password)
.then(function (data) {
if (data.isValidUser) {
window.location.href = '/index.html';
}
else {
$log.error("error handler message");
}
})
}
} }());