AngularJS এ পুনঃনির্দেশ করতে। উইন্ডো বা $ অবস্থান ব্যবহার করা


90

আমি যে অ্যাপটিতে কাজ করছি তার মধ্যে বিভিন্ন রাজ্য রয়েছে (ইউআই-রাউটার ব্যবহার করে), যেখানে কয়েকটি রাজ্যে আপনাকে লগ ইন করা প্রয়োজন, অন্যগুলি সর্বজনীনভাবে উপলভ্য।

আমি এমন একটি পদ্ধতি তৈরি করেছি যা ব্যবহারকারীর লগ ইন হয়েছে কিনা তা যাচাই করে দেখা যায়, আমার বর্তমানে যে সমস্যাটি হচ্ছে তা আসলে প্রয়োজন অনুসারে আমাদের লগইন-পৃষ্ঠাতে পুনঃনির্দেশ করছে। এটি লক্ষ করা উচিত যে লগইন পৃষ্ঠাটি বর্তমানে অ্যাঙ্গুলারজেএস অ্যাপের মধ্যে স্থাপন করা হয়নি।

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

কনসোল.লগ সঠিকভাবে লক্ষ্যযুক্ত url প্রদর্শন করে shows তারপরে লাইনটি, আমি। উইন্ডো.পেন থেকে উইন্ডো.লোকেশন.href পর্যন্ত ব্যবহারিকভাবে চেষ্টা করেছি এবং আমি যা চেষ্টা করেছি তা পুনঃনির্দেশিত হওয়ার পরে তা ঘটেনি।

সম্পাদনা (পুনরায় সেট করা):

বিষয়টি খুঁজে পেয়েছি Found

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

ভেরিয়েবল ল্যান্ডিংআরলকে 'ডোমেইন.com/লগিন' এ সেট করা হয়েছিল, যা $ window.location.href (যা আমি চেষ্টা করেছিলাম তার মধ্যে একটি) কাজ করে না। তবে কোড পরিবর্তন করার পরে

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

এটা এখন কাজ করে।


সম্ভবত ডেটাতে সার্ভার সাইড প্রমাণীকরণও যুক্ত করা উচিত, সুতরাং উপরেরটি কেবলমাত্র প্রমাণীকরণ নয়, বেশিরভাগ খালি পৃষ্ঠা দেখানোর পরিবর্তে লগইন-পৃষ্ঠাতে পুনর্নির্দেশ করা আরও সুবিধার বিষয়।
থোরবজর্ন ক্যাপেল হানসেন

4
আপনার নেটিভ locationঅবজেক্টটি ব্যবহার করতে হবে$window.location=...
চার্লিয়েটফ্ল

এর পরিবর্তে আপনি আপনার প্রমাণীকরণ সহ এটি সমস্ত একটি AngularJS করতে বিবেচনা করতে পারে - এই পোস্টটিকে দেখতে পারবেন frederiknakstad.com/2013/01/21/...
সোরেন

পরিকল্পনাটি হ'ল শেষ পর্যন্ত অ্যাংুলারজেএস অ্যাপের মধ্যে সমস্ত কিছু (লগইন সহ) অন্তর্ভুক্ত করা হবে, তবে বর্তমানে আমরা অ্যাঙ্গুলারজেএস-এ রূপান্তর করছি, নিবন্ধকরণ / লগইন স্ক্রিনটি এই পর্যায়ে সবচেয়ে কম গুরুত্বপূর্ণ বলে মনে হচ্ছে।
থোরবজর্ন ক্যাপেল হানসেন

উত্তর:


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
থরবজর্ন ক্যাপেল হ্যানসেন

ঠিক আছে, এর অর্থ আক্ষরিক ছিল না। আপনার লগইন দর্শনটির জন্য আপনি রুট হিসাবে কী সংজ্ঞা দিয়েছেন তা আমি জানি না don't সেই রুটটি $ অবস্থান.url () পদ্ধতির যুক্তিতে থাকতে পারে যাই হোক না কেন। আমি স্বচ্ছতার জন্য উত্তর সম্পাদনা করেছি।
m.casey

আহ ঠিক. এখানে সমস্যাটি হ'ল $ লোকেশন.আরল এখনও অ্যাপ্লিকেশনটির একটি সাব-পাথে পুনঃনির্দেশ করে। সুতরাং $ অবস্থান.url ('/ লগইন') ব্যবহার করে www.domain.com/app/login এর পরিবর্তে www.domain.com/login- তে পুনর্নির্দেশ করা হয়েছে
থোরবজর্ন ক্যাপেল হ্যানসেন

4
ঠিক আছে, প্রশ্নে বর্ণিত হিসাবে, বর্তমানে লগইন পৃষ্ঠাটি AngularJS অ্যাপের বাইরে বসে। সুতরাং অ্যাপ্লিকেশনটির মধ্যে কোনও পাথের পরিবর্তে www.domain.com/login এ পুনঃনির্দেশ করা দরকার।
থোরবজর্ন ক্যাপেল হ্যানসেন

4
আপনার সম্ভবত এটির $windowপরিবর্তে ব্যবহার করা উচিত উল্লেখ করার মতো বিষয়ও রয়েছে window(উত্স: stackoverflow.com/questions/28906180/… )
কালেব ফারুকী

39

দেখে মনে হচ্ছে পূর্ণ পৃষ্ঠা পুনরায় লোডের $window.location.hrefজন্য পছন্দসই উপায়।

যখন ব্রাউজারের 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;
    };
});

এইচটিএমএল কোড-নমুনা

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

3

কোন সংস্করণ থেকে নিশ্চিত না, তবে আমি ১.৩.১৪ ব্যবহার করি এবং আপনি কেবল ব্যবহার করতে পারেন:

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

ইনজেকশন $locationবা $windowনিয়ামকের প্রয়োজন নেই এবং বর্তমান হোস্ট ঠিকানা পাওয়ার প্রয়োজন নেই।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.