2013-12-15 11 views
8

का उपयोग कर मैं इस राज्य संरचना है बच्चे राज्य के लिए माता-पिता राज्य डिफ़ॉल्ट है।
मेरे बच्चे के राज्य में templateUrl के लिए डिफ़ॉल्ट मान कैसे हो सकता है?ui रूटर

मुझे लगता है कि PlacesController से यूई-व्यू सेट करना सबसे अच्छा तरीका होगा, हालांकि यह संभव नहीं लगता है।

+0

आप सेटअप कर सकते हैं एक jsfiddle इस्तेमाल किया कर रहा हूँ? –

+0

क्षमा करें, वाक्यविन्यास हाइलाइटर सेट नहीं था। अब पढ़ने के लिए साफ होना चाहिए। – Francisc

+0

[कोणीय ui-राउटर डिफ़ॉल्ट बाल राज्य] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/17001589/angularjs-ui-router-default-child-state) –

उत्तर

0

के रूप में कोणीय-यूआई विकी पेज में कहा गया है:

वहाँ एक राज्य को सक्रिय करने के तीन तरीके हैं:

  1. कॉल $ state.go()। उच्च स्तरीय सुविधा विधि।
  2. ui-sref निर्देश युक्त एक लिंक पर क्लिक करें।
  3. राज्य से जुड़े यूआरएल पर नेविगेट करें। अब जब आप /places पर नेविगेट

    <!-- places.html --> 
    <div ui-view> 
        <h1>Please choose a place</h1> 
    </div> 
    
    <!-- london.html --> 
    <h1>London is amazing!</h1> 
    

    :

https://github.com/angular-ui/ui-router/wiki#activating-a-state

+6

यह उत्तर स्वीकार नहीं किया जाना चाहिए। यह प्रश्न का उत्तर नहीं देता है, जो एक मूल स्थिति के लिए बच्चे के राज्य में चूकने के बारे में है। उत्तर के लिए – XML

+1

+1, मेरे पास ओपी के समान प्रश्न था और ऐसा लगता है कि माता-पिता से बच्चे को आविष्कार करना सही सोच नहीं है, केवल बाल मार्ग तक पहुंचने से कोई भी विचार शामिल नहीं होता है। – HappyCoder

+0

यह किसी बच्चे को अपने बच्चे द्वारा प्रतिनिधि देने का समाधान नहीं है! –

15

URL किसी रिक्त स्ट्रिंग पर सेट के साथ एक और बच्चे को राज्य को परिभाषित करने का प्रयास करें:

.state('places.default', { 
    url: '', 
    templateUrl: '...' 
} 

तो माता-पिता राज्य के लिए abstract: true जोड़ें।

+1

एचएम, यह चालाक है। हालांकि अगर मैं 'ui-view' टेम्पलेट यूआरएल को बदलने के लिए कोई तरीका था तो मुझे खुशी होगी। – Francisc

+0

मुझे ui.router में ऐसे किसी भी फ़ंक्शन के बारे में पता नहीं है। –

+0

धन्यवाद, हारून। [अतिरिक्त वर्ण] – Francisc

7

अपने राज्यों विन्यास में कोई परिवर्तन की आवश्यकता होगी, बिना, आप अपने डिफ़ॉल्ट टेम्पलेट सीधे ui-view टैग के बीच अपने HTML में डाल सकते हैं , आप "कृपया कोई स्थान चुनें" संदेश देखेंगे, और जब आप /places/london पर नेविगेट करेंगे, तो आप देखेंगे "लंदन अद्भुत है!"।

+0

बूम! बस मुझे क्या चाहिए, धन्यवाद! टिप्पणी के रूप में –

1

के रूप में हारून ने कहा आप एक डिफ़ॉल्ट बच्चे राज्य के लिए नेविगेट करने के लिए $ राज्य उपयोग कर सकते हैं, लेकिन यहाँ वहाँ एक पकड़ने है कहना मान लीजिए कि आप 1 से अधिक बच्चा है:

.state('places', 
    { 
     url:'/places', 
     controller:'PlacesController', 
     templateUrl:'views/places.html' 
    }) 
    .state('places.city', 
    { 
     url:'/:city', 
     templateUrl:function(stateParams) 
     { 
      return 'views/places/'+stateParams.city+'.html'; 
     } 
    }) 
    .state('places.child2', 
    { 
     url:'/:city2', 
     templateUrl:function(stateParams) 
     { 
      return 'views/places/'+stateParams.child2+'.html'; 
     } 
    }); 

और आप माता-पिता नियंत्रक PlacesController आपके पास $ state.go (places.city) है जब भी मूल नियंत्रक यानी स्थान नियंत्रक को बुलाया जाता है तो आपको शहर के राज्य में रीडायरेक्ट कर दिया जाएगा। तो अगर कोई बच्चा 2 राज्य पर है और रीफ्रेश बटन दबाता है तो मूल नियंत्रक को बुलाया जाएगा और उसे शहर में रीडायरेक्ट किया जाएगा जो आप नहीं चाहते हैं!

उत्तर: तो तुम एक पुनर्निर्देशन यानी अगर व्यक्ति माता पिता अवस्था में है ऐसा करने से पहले वर्तमान स्थिति के लिए जाँच कर सकते हैं तो किसी भी डिफ़ॉल्ट बच्चे राज्य को अनुप्रेषित लेकिन अगर व्यक्ति बच्चे राज्यों में से किसी में है तो ऐसा नहीं करते हैं अभिभावक नियंत्रक में पुनर्निर्देशन: -

if($state.current.name == "places"){ 
    $state.go('places.city'); 
} 

उम्मीद है कि इससे मदद मिलती है!माता-पिता राज्य

.state('places', 
{ 
    url:'/places', 
    resolve: { default: function($state) { 
     if ($state.is('places')) $state.go('places.city', { url: 'london'}) 
    }} 
    controller:'PlacesController', 
    templateUrl:'views/places.html' 
}) 
.state('places.city', 
{ 
    url:'/:city', 
    templateUrl:function(stateParams) 
    { 
     return 'views/places/'+stateParams.city+'.html'; 
    } 
}); 

सिंटैक्स त्रुटि के लिए चेक पर

+0

, दूसरा कोड ब्लॉक बस्ट 'PlacesController' में होना चाहिए –

1

संकल्प का प्रयोग करें, मैं Coffeescript को :)

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