2014-07-26 10 views
15

मेरे पास मेरी ui रूटर राज्य प्रदाता में निम्नलिखित राज्यों:AngularJS ui रूटर डिफ़ॉल्ट बच्चे राज्य और ui-sref

$urlRouterProvider.when('/parent', '/parent/child'); 
$stateProvider.state('parent', { 
    url: "/parent", 
    abstract: true 
}); 

$stateProvider.state('parent.child', { 
    url: "/child" 
}); 

कौन सा रूप में here समझाया एक डिफ़ॉल्ट बच्चे राज्य होने के लिए सबसे अच्छा अभ्यास इस प्रकार है यूई-राउटर दस्तावेज़।

हालांकि, जब अब मैं अपने दस्तावेज़ में एक लिंक शामिल करता हूं तो ui-sref जैसे <a ui-sref="parent">Link</a> के साथ माता-पिता को संदर्भित करता हूं, मुझे हमेशा एक त्रुटि मिलती है कि मैं एक अमूर्त राज्य में संक्रमण नहीं कर सकता। जब मैं मैन्युअल रूप से पता बार में यूआरएल दर्ज करता हूं और एंटर दबाता हूं तो सब कुछ ठीक काम करता है।

संबंधित Plunker: http://plnkr.co/edit/d3Z0tOwC3VCTPqGiB0df?p=preview

मैं कैसे जोड़ सकते हैं डिफ़ॉल्ट बच्चे राज्यों के साथ ui-sref?

उत्तर

27

अमूर्त राज्यों को सीधे लक्षित नहीं किया जा सकता है। वे मुख्य रूप से बाल राज्यों को बनाने के लिए आधार के रूप में कार्य करते हैं। एकमात्र कारण यह यूआरएल के साथ ठीक काम करता है कि/माता-पिता .जब

इसका मतलब है कि जब आप एक बच्चे

<a ui-sref="parent.child"> 

माता पिता के अंदर बच्चे का उपयोग कर आह्वान लोड हो जाता है द्वारा पकड़ा जाता है, माता पिता अर्थ है इसके चारों ओर परत के रूप में लोड किया जाएगा।

तो, कभी भी एक अमूर्त राज्य को लक्षित न करें। यह एक दरवाजा फ्रेम के अंदर एक दरवाजा होने की तरह है। आप केवल दरवाजे (बच्चे) के साथ खुल सकते हैं और बातचीत कर सकते हैं, लेकिन फ्रेम (पैरेंट) के साथ सीधे कभी नहीं। हालांकि, जब आप दरवाजे से बातचीत करते हैं, तो दरवाजा और फ्रेम एक प्रणाली का हिस्सा होता है जो लोड हो जाता है।

आप बच्चे को एक खाली यूआरएल दे सकते हैं, ताकि वह मूल राज्य यूआरएल में कुछ भी शामिल न करे और फिर लोड हो जाए।

अधिक जानकारी के लिए यहाँ देखें: https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views#abstract-states

+4

निश्चित रूप से मैं एक अमूर्त राज्य की सीमाओं को समझता हूं लेकिन सोचा कि यदि एक डिफ़ॉल्ट बाल राज्य को परिभाषित करना संभव है तो माता-पिता से सभी कॉल स्वचालित रूप से बच्चे को अग्रेषित करना भी संभव होना चाहिए (यानी 'ui-sref' का तार्किक व्यवहार डिफ़ॉल्ट बच्चे राज्य को अग्रेषित करना होगा)।मेरे मामले में माता-पिता वर्तमान में अमूर्त है और इसकी आवश्यकता नहीं है, लेकिन बाद में खुद का एक पृष्ठ बन सकता है (एक संपूर्ण अवधारणा के लिए अवलोकन पृष्ठ देखें)। लेकिन ऐसा लगता है कि यूई-राउटर के साथ अच्छी तरह से काम नहीं करता है। – Robin

+0

जैसा कि बताया गया है, बच्चे को एक खाली यूआरएल देकर आप पता बार में अभिभावक के यूआरएल का उपयोग करके इस बच्चे की स्थिति तक पहुंच सकते हैं। हालांकि, चीजों की स्थिति से, ऐप से यूई-एसआरई का उपयोग करके आप केवल बच्चे को लक्षित कर सकते हैं –

+0

मिल गया, धन्यवाद! – Robin

0

आप सार राज्यों के लिए $state के सुविधाजनक नामकरण संरचना का उपयोग करना चाहते हैं, तो आप एक सेवा में इस का उपयोग कर सकते हैं:

$location.path(
    $state.href('app.some.abstract.state', { some: 'params' }) 
); 

या एक में इस टेम्पलेट ($state स्थानीय या वैश्विक $scope में उपलब्ध होना चाहिए):

<a ng-href="{{$state.href('app.some.abstract.state', { some: 'params' })}}">...</a> 

यदि मैंने इसे नियमित रूप से नियमित रूप से किया है, तो मैं इसके लिए ui-sref जैसा निर्देश बनाउंगा, अमूर्त राज्य सीमा को घटा दूंगा।

संबंधित मुद्दे