অন্যথায় স্টেটপ্রোভাইডারে


95

কৌণিক-ui এ-রাউটার ব্যবহার করে, আমি কিভাবে ব্যবহার করতে পারেন অন্যথায় পদ্ধতি উপর $ stateProvider বা কিভাবে আমি এটা সব সময়ে ব্যবহার করতে পারি?


আপনি কি করতে চেষ্টা করছেন? (দয়া করে নোট করুন যে আমি পুরোপুরি বুঝতে পারি না $stateProvider.otherwise, সুতরাং এটি আমার সাহায্য করবে)
কেভিন মেরেডিথ

উত্তর:


124

আপনি কেবল ব্যবহার করতে পারবেন না $stateProvider

আপনাকে ইনজেক্ট করতে হবে $urlRouterProviderএবং এর মতো একটি কোড তৈরি করতে হবে:

$urlRouterProvider.otherwise('/otherwise');

/otherwiseURL যথারীতি একটি রাষ্ট্র উপর নির্ধারণ করা আবশ্যক:

 $stateProvider
    .state("otherwise", { url : '/otherwise'...})

এই লিঙ্কটি দেখুন যেখানে কস্পারলিং ব্যাখ্যা করে


আপনি আসলে ব্যবহার করতে পারেন $stateProvider। আপনি যদি কেবল কোনও টেম্পলেট প্রদর্শন করতে চান তবে এটি পুনর্নির্দেশ নয় তবে এটি কম কাজ। আমি @ জুয়ান-হার্নান্দেজের উত্তর পছন্দ করি।
ওয়েলটসচেজার্জ

otherwise(এই ক্ষেত্রে '/otherwise') এ পাস করা মানের সাথে কি রাষ্ট্রের নাম (প্রথম প্যারামিটার .state) বা urlবিকল্পের মানটির সাথে মিল পাওয়া যায় ?
d512


81

আপনি সমস্ত সিনট্যাক্স ( ) $stateProviderব্যবহার করে ক্যাচটি ব্যবহার করতে পারেন "*path"। নিম্নলিখিতগুলির মতো আপনার তালিকার নীচে আপনাকে একটি রাষ্ট্রের কনফিগারেশন যুক্ত করতে হবে:

$stateProvider.state("otherwise", {
    url: "*path",
    templateUrl: "views/error-not-found.html"
});

সমস্ত অপশন https://github.com/angular-ui/ui-router/wiki/URL- রাউটিং#regex- পরিমিতিগুলিতে ব্যাখ্যা করা হয়েছে ।

এই বিকল্পের দুর্দান্ত জিনিসটির বিপরীতে $urlRouterProvider.otherwise(...), হ'ল আপনি কোনও অবস্থান পরিবর্তন করতে বাধ্য হবেন না।


আপনি সম্প্রসারিত দয়া পারে: you're not forced to a location change?
কেভিন মেরেডিথ

4
তার অর্থ ইউআরএলটি যা ছিল তা থেকে যাবে। সুতরাং যদি ব্যবহারকারী যায় /this/does/not/existতবে URL টি ঠিক সেইভাবে ঠিকানা বারে থাকবে। অন্যান্য সমাধান আপনাকে নিয়ে যাবে/otherwise
ম্যাট গ্রেয়ার

আমি আপনার সমাধান ব্যবহার করা হয় এবং এটা কাজ করে (আমি URL পাওয়া যায়নি যে, কারণ আমি ব্যবহার করছি যা মহান রাখতে পারবেন না luisfarzati.github.io/angulartics ক্ষেত্রে যখন এবং এই ভাবে আমিও পৃষ্ঠাগুলি পাওয়া যায়নি করতে নেভিগেশন দেখতে পাবেন) ব্যবহারকারী নেভিগেট করে url উপস্থিত নেই। তবে আমি যদি কোনও নিয়ামকের ভিতরে inside state.go ('অন্যথায়') ব্যবহার করে এই url তে নেভিগেট করি তবে আমি ইউআরএল হারাব। ব্যবহারকারী যখন কোনও আইটেমের বিশদ পৃষ্ঠাতে যায় এবং সার্ভারটি 404 ফেরত দেয় (উদাহরণস্বরূপ আইটেমটি মুছে ফেলা হয়েছিল) তখন আমি এই স্থানে স্পষ্টত নেভিগেট করি। আপনি কি এটি ঠিক করার কোনও উপায় জানেন?
pcatre

@ প্যাক্যাট্রে আপনি বিকল্প অবস্থান = মিথ্যা ব্যবহার করতে পারেন এবং ইউআরএল পরিবর্তন হবে না। যেমন । state.go ('অন্যথায়', {}, {অবস্থান: মিথ্যা})
জাকুবকেজলিক

35

আপনি অন্যথায় ফাংশনটিতে ম্যানুয়ালি $ রাজ্যের ইনজেকশনও করতে পারেন, যা আপনি নন-url অবস্থায় নেভিগেট করতে পারেন। এটিতে ব্রাউজারের অ্যাড্রেসবারটি পরিবর্তন না করার সুবিধা রয়েছে যা পূর্ববর্তী পৃষ্ঠায় ফিরে যেতে পরিচালিত করতে সহায়ক।

    $urlRouterProvider.otherwise(function ($injector, $location) {
        var $state = $injector.get('$state');

        $state.go('defaultLayout.error', {
            title: "Page not found",
            message: 'Could not find a state associated with url "'+$location.$$url+'"'
        });
    });

যেটি অন্যথায় যখন ব্যবহৃত হয় তখন আমরা মিড-অ্যাপ বা অনলোড কিনা তা যাচাই করতে আমার সমস্যাটি সমাধান করে - আপনাকে অনেক ধন্যবাদ :)
জার্ন বার্কেফেল্ড

তুমি আমার দিন বাঁচিয়েছ!
মাইলিগ

আপনি যদি আপনার এই প্রয়োজনটি কমাতে চান তবে ভুলে যাবেন না
স্টেন মুচো

4

আমি কেবল ইতিমধ্যে সরবরাহ করা দুর্দান্ত উত্তরগুলি পেতে চাই। @uirouter/angularjsশ্রেণীর সর্বশেষ সংস্করণটিকে UrlRouterProviderশ্রেণিবদ্ধ হিসাবে চিহ্নিত করা হয়েছে। তারা এখন UrlServiceপরিবর্তে ব্যবহারের পরামর্শ দেয় । আপনি নিম্নলিখিত পরিবর্তন সঙ্গে একই ফলাফল অর্জন করতে পারেন:

$urlService.rules.otherwise('/defaultState');

অতিরিক্ত পদ্ধতি: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html


3

ঠিক আছে, নির্বোধ মুহূর্তটি যখন আপনি বুঝতে পারবেন যে আপনি জিজ্ঞাসা করা প্রশ্নটি ইতিমধ্যে নমুনা কোডের প্রথম লাইনে উত্তর দেওয়া হয়েছে! স্যাম্পল কোডটি একবার দেখুন।

       angular.module('sample', ['ui.compat'])
      .config(
        [        '$stateProvider', '$routeProvider', '$urlRouterProvider',
        function ($stateProvider,   $routeProvider,   $urlRouterProvider) {
          $urlRouterProvider
            .when('/c?id', '/contacts/:id')
            .otherwise('/'); // <-- This is what I was looking for ! 


          ....

এখানে একবার দেখুন।


0

গৃহীত উত্তর রেফারেন্স angular-routeসম্পর্কে জিজ্ঞেস করে ui-router। গৃহীত উত্তরটিতে "একঘেয়েটি" ব্যবহার করা হয় $routeProvider, যার জন্য ngRouteমডিউল প্রয়োজন (যেখানে ui-routerপ্রয়োজন needsui.router মডিউল)

সর্বোচ্চ রেট উত্তর ব্যবহার $stateProviderপরিবর্তে, এরকম কিছু বলেছেন .state("otherwise", { url : '/otherwise'... }), কিন্তু আমি এর "অন্যথায়" কোনো উল্লেখ খুঁজে পাচ্ছি না ডকুমেন্টেশন এটা লিঙ্ক । তবে, আমি দেখতে পাচ্ছি যে এই উত্তরে$stateProvider উল্লেখ করা হয়েছে যেখানে এটি বলে:

আপনি কেবল ব্যবহার করতে পারবেন না $stateProvider। আপনাকে ইনজেকশন দেওয়া দরকার$urlRouterProvider

আমার উত্তরটি আপনাকে এখানে সহায়তা করতে পারে। আমার জন্য, এটি ঠিক এইভাবে ব্যবহার করার জন্য যথেষ্ট ছিল $urlRouterProvider:

 my_module
   .config([
    , '$urlRouterProvider'
    , function(
        , $urlRouterProvider){
            //When the url is empty; i.e. what I consider to be "the default"
            //Then send the user to whatever state is served at the URL '/starting' 
            //(It could say '/default' or any other path you want)
            $urlRouterProvider
                    .when('', '/starting');
                    //...
    }]);

আমার পরামর্শ ui-router ডকুমেন্টেশনের সাথে সামঞ্জস্যপূর্ণ , ( এই নির্দিষ্ট সংশোধন ), যেখানে এটির অনুরূপ ব্যবহার অন্তর্ভুক্ত রয়েছে। when(...)পদ্ধতি (ফাংশনটিতে প্রথম কল):

app.config(function($urlRouterProvider){
  // when there is an empty route, redirect to /index   
  $urlRouterProvider.when('', '/index');

  // You can also use regex for the match parameter
  $urlRouterProvider.when(/aspx/i, '/index');
})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.