2014-04-08 13 views
17

में एक्सेस स्टेटस पैरा मेरे पास महान यूई-राउटर का उपयोग करके एक कोणीय ऐप है।कोणीय यूआई राउटर - पैरेंट

.config(function ($stateProvider, $urlRouterProvider) { 

    $stateProvider 

    // PROJECT DETAIL 
    .state('project', { 
     url: '/project/:projectId/', 
     resolve: { 
      /* some base api calls */ 
     }, 
     views: { 
      'task-list': { 
       templateUrl: 'partials/task_list.tmpl.html', 
       controller: 'TaskListCtrl', 
       resolve: { 
        tasks: function ($stateParams, ConcernService) { 
         return ConcernService.get('project-tasks/', $stateParams.projectId); 
        }, 
       } 
      }, 
      'concern-instance': { 
       /* some resolved variables */ 
      } 
     } 
    }) 
    .state('project.task', { 
     url: 'task/:taskId/', 
     views: { 
      '[email protected]': { 
       /* some different resolved variables */ 
      }, 
     } 
    }) 

मक्खन की तरह यह सब काम करता है:

मेरे सेटअप की तरह दिखता है। हालांकि task_list टेम्पलेट में जब project.task में, मैं taskId परम तक पहुंचने में सक्षम होना चाहता हूं, इसलिए मैं सक्रिय नौसेना लिंक को हाइलाइट कर सकता हूं, भले ही यूआरएल #/project/123/task/456/taskId खाली हो। मैं समझता हूं कि ऐसा इसलिए है क्योंकि टेम्पलेट्स के पास केवल उस राज्य के लिए घोषित पैराम तक पहुंच है। तो अगर मैं project.task राज्य में taskId प्राप्त करना चाहता हूं, तो मुझे यह कैसे करना चाहिए? क्या मुझे porject.task में task-list फिर से घोषित करने की आवश्यकता है?

किसी भी मदद की बहुत सराहना की।

+1

काम करता है यह एक कष्टप्रद समस्या है। यदि आप अभिभावक नियंत्रक/टेम्पलेट में राज्य param की आवश्यकता नहीं है, तो आप अभिभावक राज्य के लिए यूआरएल को हटा सकते हैं, और बच्चे के राज्यों के लिए पूर्ण यूआरएल घोषित कर सकते हैं। यदि आप करते हैं, तो मुझे लगता है कि आप बच्चों द्वारा उपयोग किए जाने वाले चर के लिए राज्य परम को दायरे में डाल सकते हैं। – aet

+1

जैसा कि आप वर्णन करते हैं हम उसी समस्या में भाग रहे हैं। आप शायद पहले से ही जानते हैं, लेकिन आप वास्तव में '$ state.params' के माध्यम से अपने सभी पैरामीटर प्राप्त कर सकते हैं। लेकिन, यदि आप मेरे जैसे हैं, तो यह आपके पैरामीटर को अपने सभी नियंत्रकों के विभिन्न तरीकों से प्राप्त करने के लिए आपके साथ अच्छी तरह से नहीं बैठेगा। [दस्तावेज़ीकरण] में अब तक की सबसे नज़दीकी चीज़ (https://github.com/angular-ui/ui-router/wiki/URL-Routing#stateparams-service/) एक मूल स्थिति के विपरीत मुद्दे का वर्णन करती है परम बच्चे के लिए उपलब्ध नहीं है। क्या आपने कभी यह पता लगाया है ('$ राज्यपराम 'के माध्यम से)? – Manny

+0

क्या आपने कभी यह पता लगाया था? मुझे भी एक ही समस्या है। – pankaj

उत्तर

-1

आप कार्य आईडी तक पहुंचने का प्रयास कैसे कर रहे हैं? यह इस तरह से होना चाहिए, सरकारी documentation से लिया:

$stateProvider 
    .state('contacts.detail', { 
     url: "/contacts/:contactId", 
     templateUrl: 'contacts.detail.html', 
     controller: function ($stateParams) { 
      // If we got here from a url of /contacts/42 
      expect($stateParams).toBe({contactId: 42}); 
     } 
    }) 
14

यूआई-रूटर प्रलेखन here में वे समझाने कि

"$ stateParams वस्तु केवल पैरामीटर थे कि कि के साथ पंजीकृत में शामिल होंगे राज्य। "

आप माता-पिता पर हल की गई संपत्ति का उपयोग करके केवल बाल राज्य में मूल स्थिति पैरामीटर तक पहुंच सकते हैं।

अपने 'परियोजना' राज्य (मूल) में स्थानांतरित इस:

...  
resolve: { 
    // Expose projectId parameter to child states 
    projectId: ['$stateParams', function ($stateParams) { 
     return $stateParams.projectId; 
    }] 
}, 
फिर अपने नियंत्रक के अंदर अपने राज्य 'project.task' (बच्चे) के लिए

तुम दोनों

$stateParams.projectId 
तक पहुंच होनी चाहिए

और

$stateParams.taskId 
+0

@ डार्विनटेक अगर यह काम करता है तो कृपया उत्तर के रूप में चिह्नित करें। Thx – goodies4uall

4

मैंदेखा हैमें बाल राज्य पैराम शामिल हैं। इस पर कोई दस्तावेज नहीं लग रहा है। यह सिर्फ

+0

आप सही हैं! मेरा जीवन बचा लिया गया है :) :) धन्यवाद! – Nat

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