কৌণিক রুটের বিকল্প প্যারামিটার মান থাকতে পারে?


166

আমি কি optionচ্ছিক প্যারাম (একই টেম্পলেট এবং নিয়ামক) সহ কোনও রুট সেট করতে পারি, তবে কিছু প্যারাম উপস্থিত না থাকলে তা উপেক্ষা করা উচিত?

সুতরাং নিম্নলিখিত দুটি বিধি লেখার পরিবর্তে, কেবল একটি আছে?

module.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
     when('/users/', {templateUrl: 'template.tpl.html', controller: myCtrl}).            
     when('/users/:userId', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

এর মতো কিছু ([এই পারমটি alচ্ছিক])

when('/users[/:userId]', {templateUrl: 'template.tpl.html', controller: myCtrl})
//note: this previous doesn't work

আমি তাদের ডকুমেন্টেশনে কিছু খুঁজে পাইনি।


তাদের []1.1.5 সংস্করণে উপেক্ষা করা হবে (ছাড়াই )।
ওজেড_

সত্যি? আমি 1.1.5-তে আছি, কোডটি চেষ্টা করে [: ইউজারআইডি] এবং সেগুলি উপেক্ষা করবেন না।
আলেকজান্দ্রু আর

ছাড়া চেষ্টা করুন []। এই প্রতিশ্রুতিটি দেখুন: github.com/angular/angular.js/commit/…
ওজেড_

ওফস, দুঃখিত, এটি প্রায় $ সংস্থান, এটি রাউটিংয়ে কাজ করবে কিনা তা নিশ্চিত নয়। মাফ করবেন.
ওজেড_

1
যদি জি-ওরেগের উত্তরটি ভাল থাকে তবে আপনি কি দয়া করে এটি চিহ্নিত করবেন যাতে লোকেরা সর্বোত্তম উত্তরটি খুঁজে পেতে পুরো জিনিসটি স্ক্রোল করতে না পারে?
অ্যালেক্সস্ট্যাক

উত্তর:


243

দেখে মনে হচ্ছে অ্যাঙ্গুলারের এখন এটির জন্য সমর্থন রয়েছে।

এর জন্য সর্বশেষ (v1.2.0) ডক্স থেকে $routeProvider.when(path, route):

pathএকটি প্রশ্ন চিহ্ন সহ alচ্ছিক নামযুক্ত গোষ্ঠীগুলি থাকতে পারে ( :name?)


7
ট্রেলিং স্ল্যাশ ব্যবহার এড়াতে কোনও উপায়? যদি আমার রুটটি থাকে: .when('/claims/documents/:CLAIMS_ID/:DOCUMENT_NAME?'...ইউআরএলটির পিছনে স্ল্যাশ না থাকলে এটি মেলে না। সুতরাং /claims/documents/1234/ম্যাচ, কিন্তু /claims/documents/1234না।
জেমস বেল

1
@ জেমসবেল
লেইকো

5
কৌণিক 1.3 হিসাবে, উপরের মন্তব্যে উল্লিখিত পিছনের স্ল্যাশ ইস্যুটি ঠিক করা হয়েছে। / দাবী / নথি / 1234 / এ নেভিগেট করা সঠিকভাবে কাজ করে / দাবী / নথি / 1234 হিসাবে। সংক্ষেপে, এটি পিছনে স্ল্যাশ সহ বা ছাড়া কাজ করে।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো

1
আমার রুটে optionচ্ছিক প্যারামিটার থাকলে আমি এখনও এই আচরণটি দেখছি behavior উদাহরণস্বরূপ: যদি রুটটি হয়: '/: শ্রেণিবদ্ধি? / প্যাকেজ / তুলনা' এবং আমি এটি কাজ করে url "/ প্যাকেজ / তুলনা" নেভিগেট করার চেষ্টা করি। যদি আমি কোনও কারণে '/ প্যাকেজ / তুলনা /' চেষ্টা করি তবে আমি asci কোডটি শ্রেণিবদ্ধকরণে সংযুক্ত করে, বা '/% 3f / প্যাকেজ / তুলনা' পাই যা কোনও আসল রুট নয়।
রুবি_নেউবি

ডকুমেন্টেশন বিভ্রান্তিকর।
অলিভার ডিকসন

59

@ জি-ইওরোজের উল্লেখের মতো, আপনি এটি এটি তৈরি করতে পারেন:

module.config(['$routeProvider', function($routeProvider) {
$routeProvider.
  when('/users/:userId?', {templateUrl: 'template.tpl.html', controller: myCtrl})
}]);

আপনার প্রয়োজন মতো optionচ্ছিক পরামিতিগুলিও তৈরি করতে পারেন।


8

দয়া করে এখানে @ জ্লেরেউর উত্তরটি দেখুন: /programming/11534710/angularjs-how-to-use-routeparams-in-generating-the-templateurl

আপনি টেম্পলেট স্ট্রিং উত্পন্ন করতে একটি ফাংশন ব্যবহার করতে পারেন:

var app = angular.module('app',[]);

app.config(
    function($routeProvider) {
        $routeProvider.
            when('/', {templateUrl:'/home'}).
            when('/users/:user_id', 
                {   
                    controller:UserView, 
                    templateUrl: function(params){ return '/users/view/' + params.user_id;   }
                }
            ).
            otherwise({redirectTo:'/'});
    }
);

2

আসলে আমি মনে করি OZ_ কিছুটা সঠিক হতে পারে।

আপনার যদি এই রুট থাকে '/users/:userId'এবং নেভিগেট করে '/users/'(অনুগ্রহ করে নোট করুন /), $routeParamsআপনার কন্ট্রোলারে userId: ""1.1.5 থাকা একটি অবজেক্ট হওয়া উচিত । সুতরাং কোনও প্যারামিটার userIdপুরোপুরি উপেক্ষা করা হয়নি, তবে আমি মনে করি এটি আপনি যাচ্ছেন সেরা।

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