AngularJS में रीडायरेक्ट में $ विंडो या $ लोकेशन का उपयोग करना


90

मैं जिस ऐप पर काम कर रहा हूं उसमें विभिन्न राज्य (यूआई-राउटर का उपयोग करना) शामिल हैं, जहां कुछ राज्यों को आपको लॉग इन करने की आवश्यकता होती है, अन्य सार्वजनिक रूप से उपलब्ध हैं।

मैंने एक विधि बनाई है जो वैध रूप से जांचती है कि कोई उपयोगकर्ता लॉग इन है या नहीं, वर्तमान में मेरे पास जो समस्याएँ हैं वे वास्तव में आवश्यक होने पर हमारे लॉगिन-पेज पर पुनः निर्देशित कर रहे हैं। यह ध्यान दिया जाना चाहिए कि लॉगिन पृष्ठ को वर्तमान में AngularJS ऐप के भीतर नहीं रखा गया है।

app.run(function ($rootScope, $location, $window) {


    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {

        if (toState.data.loginReq && !$rootScope.me.loggedIn) {
            var landingUrl = $window.location.host + "/login";
            console.log(landingUrl);
            $window.open(landingUrl, "_self");
        }
    });
});

कंसोल .log इच्छित url को ठीक से दिखाता है। उसके बाद की लाइन, मैंने $ window से व्यावहारिक रूप से सब कुछ करने की कोशिश की है। to window.location.href और कोई फर्क नहीं पड़ता कि मैंने क्या किया है कोई पुनर्निर्देशन नहीं हुआ है।

संपादित करें (पंजीकृत):

मुद्दा मिल गया।

var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");

वेरिएबल लैंडिंगयूआरएल को 'domain.com/login' पर सेट किया गया था, जो $ window.location.href (जो कि मेरी कोशिश की गई चीजों में से एक था) के साथ काम नहीं करेगा। हालाँकि कोड बदलने के बाद

var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;

अब यह काम करता है।


संभवतः यह जोड़ना चाहिए कि डेटा पर सर्वर साइड प्रमाणीकरण भी है, इसलिए उपरोक्त केवल प्रमाणीकरण नहीं है, यह ज्यादातर खाली पृष्ठ दिखाने के बजाय लॉगिन-पेज पर पुनर्निर्देशित करने के लिए अधिक सुविधाजनक मामला है।
थोरबजोरन कप्पल हेंसन

1
आपको मूल locationवस्तु की आवश्यकता है$window.location=...
charlietfl

आप इसे अपने प्रमाणीकरण सहित सभी कोणीयजेएस बनाने पर विचार कर सकते हैं - इस पोस्ट को देखें frederiknakstad.com/2013/01/21/…
सोरेन

यह योजना अंत में AngularJS ऐप के अंदर सब कुछ (लॉगिन सहित) शामिल करने की है, लेकिन जैसा कि हम वर्तमान में AngularJS में बदलाव कर रहे हैं, पंजीकरण / लॉगिन स्क्रीन इस चरण में सबसे कम महत्वपूर्ण लगती है।
थोरबजोरन कप्पल हेंसन

जवाबों:


82

मेरा मानना ​​है कि ऐसा करने का तरीका है $location.url('/RouteTo/Login');

स्पष्टता के लिए संपादित करें

मेरे लॉगिन दृश्य के लिए मेरा मार्ग कहें /Login, मैं $location.url('/Login')उस मार्ग पर नेविगेट करने के लिए कहूंगा ।

कोणीय ऐप के बाहर के स्थानों के लिए (अर्थात कोई मार्ग निर्धारित नहीं), सादे पुराने जावास्क्रिप्ट परोसेंगे:

window.location = "http://www.my-domain.com/login"

बस यही कोशिश की। दुर्भाग्य से, यह www.domain.com/app/RouteTo/login के बजाय www.domain.com/login
Thorbjørn Kappel Hansen

सही, इसका मतलब शाब्दिक नहीं था। मुझे नहीं पता कि आपने अपने लॉगिन दृश्य के लिए मार्ग के रूप में क्या परिभाषित किया है। उस स्थान को $ ठिकाने के लिए तर्क में रखें जो भी हो ।url () विधि। मैंने स्पष्टता के लिए उत्तर संपादित किया है।
एम। सुलेमानी

ठीक है। यहाँ मुद्दा यह है कि $ location.url अभी भी ऐप के एक उप-पथ पर रीडायरेक्ट करता है। इसलिए $ location.url ('/ login') का उपयोग www.domain.com/app/login की बजाय www.domain.com/login
Thorbjørn Kappel Hansen

1
खैर, जैसा कि सवाल में कहा गया है, वर्तमान में लॉगिन पेज AngularJS ऐप के बाहर बैठता है। इसलिए ऐप के भीतर एक पथ के बजाय www.domain.com/login पर पुनर्निर्देशित करने की आवश्यकता है।
थोरबजोरन कप्पल हेंसन

5
यह भी ध्यान देने योग्य है कि शायद आपको $windowइसके बजाय window(स्रोत: stackoverflow.com/questions/28906180/… ) का उपयोग करना चाहिए
कालेब फारुकी

39

ऐसा लगता है कि पूर्ण पृष्ठ पुनः लोड करने $window.location.hrefके लिए पसंदीदा तरीका है।

जब ब्राउज़र URL बदला जाता है तो यह एक पूर्ण पृष्ठ पुनः लोड नहीं करता है। URL बदलने के बाद पृष्ठ को पुनः लोड करने के लिए, निम्न-स्तरीय API, $ window.location.href का उपयोग करें।

https://docs.angularjs.org/guide/$location


19

यह आपकी मदद कर सकता है! डेमो

AngularJs कोड-नमूना

var app = angular.module('urlApp', []);
app.controller('urlCtrl', function ($scope, $log, $window) {
    $scope.ClickMeToRedirect = function () {
        var url = "http://" + $window.location.host + "/Account/Login";
        $log.log(url);
        $window.location.href = url;
    };
});

HTML कोड-नमूना

<div ng-app="urlApp">
    <div ng-controller="urlCtrl">
        Redirect to <a href="#" ng-click="ClickMeToRedirect()">Click Me!</a>
    </div>
</div>

3

क्या संस्करण से निश्चित नहीं है, लेकिन मैं 1.3.14 का उपयोग करता हूं और आप बस उपयोग कर सकते हैं:

window.location.href = '/employee/1';

नियंत्रक में $locationया इंजेक्षन की आवश्यकता नहीं है $windowऔर वर्तमान होस्ट पता प्राप्त करने की आवश्यकता नहीं है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.