AngularJS kullanarak başka bir sayfaya nasıl yönlendirilirsiniz?


171

Hizmet dosyasında işlevsellik gerçekleştirmek için ajax çağrısı kullanıyorum ve yanıt başarılı olursa sayfayı başka bir URL'ye yönlendirmek istiyorum. Şu anda bunu basit js "window.location = response ['message'];" kullanarak yapıyorum. Ama angularjs kodu ile değiştirmem gerekiyor. Stackoverflow üzerinde çeşitli çözümler baktım, $ konum kullandılar. Ama açısal olarak yeniyim ve onu uygulamakta zorlanıyorum.

$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
        })

2
Bunun için neden açısal kullanmanız gerekiyor? Belirli bir nedeni var mı? document.location doğru yol ve muhtemelen açısal yoldan daha verimli
casraf

Yanıtlar:


229

Açısal kullanabilirsiniz $window:

$window.location.href = '/index.html';

Bir kontrolörde örnek kullanım:

(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');
            });
        }
    }
})();

1
$ Window.location.href kullandım ama tanımsız fonksiyon $ window.location bir hata veriyor. Buna herhangi bir bağımlılık eklemem gerekir mi?
Farjad Hasan

3
Hayır, ancak kumandanıza $ window enjekte etmeniz gerekebilir. Düzenlenmiş cevabımı görün.
Ewald Stieger

2
Onun window.location.href değil $ window.location.href
Junaid

3
@ user3623224 - aslında değil;)
Ben

12
@Junaid window.location.href geleneksel pencere nesnesi içindir, $ window.location.href AngularJS $ pencere nesnesi içindir, burada: docs.angularjs.org/api/ng/service/$window
Mikel Bitson

122

Yeni bir URL'ye farklı şekillerde yönlendirebilirsiniz.

  1. Sayfayı da yenileyecek $ penceresini kullanabilirsiniz
  2. Tek sayfa uygulamasının içinde "kalabilir" ve $ konumunu kullanabilirsiniz ; bu durumda $location.path(YOUR_URL);veya arasında seçim yapabilirsiniz $location.url(YOUR_URL);. Yani 2 yöntem arasındaki temel fark, $location.url()aynı zamanda get parametrelerini de etkilemesidir $location.path().

Dokümanları okumanızı tavsiye ederim $locationve $windowböylece aralarındaki farkları daha iyi anlayabilirsiniz .


15

$location.path('/configuration/streaming'); Bu işe yarayacak ... Konum hizmetini denetleyiciye enjekte et


13

Yeni sayfaya yönlendirmek için aşağıdaki kodu kullandım

$window.location.href = '/foldername/page.html';

ve denetleyici işlevime $ pencere nesnesi enjekte etti.


12

Size yardımcı olabilir !!

AngularJs kod örneği

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");
  };
}

6

AngularJS'de formunuzu (gönderildiğinde) window.location.href='';aşağıdaki gibi kullanarak başka bir sayfaya yönlendirebilirsiniz :

postData(email){
    if (email=='undefined') {
      this.Utils.showToast('Invalid Email');
    } else {
      var origin = 'Dubai';
      this.download.postEmail(email, origin).then(data => { 
           ...
      });
      window.location.href = "https://www.thesoftdesign.com/";      
    }
  }

Sadece şunu deneyin:

window.location.href = "https://www.thesoftdesign.com/"; 

4

Açısal bir uygulamada farklı bir sayfaya yönlendirme konusunda sorunlarla karşılaştım

$windowEwald'ın cevabında önerdiği gibi ekleyebilir veya eklemek istemiyorsanız $window, sadece bir zaman aşımı ekleyin ve işe yarayacak!

setTimeout(function () {
        window.location.href = "http://whereeveryouwant.com";
    }, 500);

2

Kullanmanın basit yolu

app.controller("Back2Square1Controller", function($scope, $location) {
    window.location.assign(basePath + "/index.html");
});

2

Bunu yapmanın iyi bir yolu, $ state.go ('statename', {params ...}) kullanmaktır.

(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
                }
            })
    }

});

// rotalar

(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
   }

})();

0
 (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");
                }
            })
    }
} }());

0

Bir bağlantı kullanmak istiyorsanız: html'de:

<button type="button" id="btnOpenLine" class="btn btn-default btn-sm" ng-click="orderMaster.openLineItems()">Order Line Items</button>

dizgi dosyasında

public openLineItems() {
if (this.$stateParams.id == 0) {
    this.Flash.create('warning', "Need to save order!", 3000);
    return
}
this.$window.open('#/orderLineitems/' + this.$stateParams.id);

}

Umarım bu örneği diğer cevaplarla birlikte benim için olduğu gibi faydalı görürsünüz.


0

kullanma location.href="./index.html"

veya yarat scope $window

ve kullanarak $window.location.href="./index.html"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.