2015-03-13 8 views
8

मेरे पास कोणीय यूई राउटर राज्य प्रदाता का उपयोग करके मेरे कोणीय ऐप में नीचे बताए गए राज्य हैं। और, मैं एक ही विन्यास के साथ कई राज्यों को परिभाषित करना चाहता हूं यानी। एक ही टेम्पलेट और नियंत्रक के साथ।कोणीय यूई राउटर राज्य - एक ही टेम्पलेट और नियंत्रक के साथ कई राज्य

$stateProvider 
     .state('parent', { 
      templateUrl: 'parent.html', 
      abstract: true, 
      parent: 'apm' 
     }) 
     .state('parent.list', { 
      abstract: true, 
      url: '/list', 
      templateUrl: 'list.html', 
      controller: 'ListCtrl' 
     }) 

     .state('parent.list.closed', { 
     url: '/q', 
     templateUrl: 'closed.html' 
     }) 

     .state('parent.list.details', { // would like to have same template, controller on different state parent.details without list 
      url: '/:id/:name', 
      abstract: true, 
      templateUrl: 'details.html', 
      controller: 'DetailsCtrl', 
      resolve: { 
       ..... 
       ..... 
      } 
     }) 
     .state('parent.list.details.data', { // would like to have same template, controller on different state parent.details.data without list 
      url: '/details', 
      views : { 
      'view1' : { 
       templateUrl : 'view1.html' 
      }, 
      'view2' : { 
       templateUrl : 'view2.html', 
       controller : 'View2Ctrl' 
      }, 
      'view3' : { 
       templateUrl : 'view3.html' 
      }, 
      'view4' : { 
       templateUrl : 'view4.html' 
      } 
      } 
     }) 

यह

.state(['parent.list.details', 'parent.details'], { 
      url: '/:id/:name', 
      abstract: true, 
      templateUrl: 'details.html', 
      controller: 'DetailsCtrl', 
      resolve: { 
       ..... 
       ..... 
      } 
     }) 

कोई मदद या सुझाव की तरह कुछ करने के लिए संभव है?

+0

कारण है कि आप एक सादे करने के लिए आम विकल्प निकालने नहीं है javaScript वैरिएबल या EV एक कोणीय निरंतर? मुझे लगता है कि आप खातिर सूखने के लिए कर रहे हैं, है ना? – goreorto

उत्तर

7

प्रत्येक राज्य को अपनी .state() विधि में परिभाषित करने की आवश्यकता है। आप ऊपर सूचीबद्ध तरीके से इसे करने की कोशिश कर रहे कई समस्याओं में भाग लेंगे। सबसे महत्वपूर्ण रूप से यूआरएल होगा।

आप बस कर सकते हैं: कोड अर्थों में सघन नहीं है

.state('parent.list', { 
     url: '/list', 
     abstract: true, 
     templateUrl: 'details.html', 
     controller: 'DetailsCtrl', 
     resolve: { 
      ..... 
      ..... 
     } 
    .state('parent.list.details', { 
     url: '/:id/:name', 
     abstract: true, 
     templateUrl: 'details.html', 
     controller: 'DetailsCtrl', 
     resolve: { 
      ..... 
      ..... 
     } 
    }) 

जबकि या कुशल आप नियंत्रक और प्रत्येक राज्य पर आंशिक प्रयुक्त घोषित करने के लिए है, यह आवश्यक है क्योंकि प्रत्येक राज्य की अपनी जरूरत .state() विधि

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। मेरी एकमात्र चिंता यह है कि मैं चाहता हूं कि नए राज्यों के लिए कोड की रेखाओं का समूह दोहराएं। – user3701057

+0

हाँ जैसे मैं कह रहा था कि यह सबसे कुशल नहीं है लेकिन क्योंकि uiRouter को प्रत्येक राज्य के लिए '.state()' विधि घोषित करने की आवश्यकता है, मुझे इसके चारों ओर एक रास्ता नहीं दिख रहा है। यहां uiRouter की विकी _ "से सीधे उद्धरण दिया गया है," राज्यों में अक्सर चीजें आम होती हैं, और इस मॉडल में इन समानताओं को फैक्टर करने का प्राथमिक तरीका राज्य पदानुक्रम के माध्यम से होता है, यानी माता-पिता/बच्चे राज्य उर्फ ​​नेस्टेड राज्यों के माध्यम से होते हैं। " –

+0

यदि एक ही नियंत्रक अलग-अलग राज्यों से बंधे हैं, तो ऐसे कार्य जो बाध्य करने पर निष्पादित होते हैं: सर्वर से सूची प्राप्त करना बार-बार कहा जाएगा, यही वह समस्या है जो अब मैं समस्या में हूं। एक संभावित समाधान क्या हो सकता है? – 89n3ur0n

3

मैं एक ही चाहता था और इस तरह से इसे बनाया:

//add a new Function to the object $stateProvider 
       $stateProvider.states = (statesArr, obj) => { 

        for (var i in statesArr) { 
         var state = statesArr[i]; 

         $stateProvider.state(state, obj); 
        } 

        return $stateProvider; 
       }; 


//use the new function 
       $stateProvider 

       .states(["main", "main.test"], { 
        url: '/main', 
        templateUrl: 'modules/ViewContainer.html', 
        controllerAs: 'currentCtrl', 
        controller: 'MainCtrl' 
       }) 
+1

बहुत अच्छा काम करता है, मुझे राज्य वस्तु को $ state.go ('^। Mystate') के साथ काम करने के लिए क्लोन करना पड़ा; अंडरस्कोर के साथ उदाहरण: $ stateProvider.state (राज्य, _.clone (obj)); – dam1

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