2017-05-28 4 views
5

पर विचार करें निम्नलिखित मार्ग विन्यास:कैसे ताज़ा करने के लिए एक मार्ग के संकल्प लिया डेटा

const routes: Routes = [ 
    { 
    path: '', 
    component: AppComponent, 
    resolve: { 
     app: AppResolver 
    }, 
    children: [ 
     { 
     path: 'user/:uid', 
     resolve: { 
      user: UserResolver 
     }, 
     children: [ 
      { 
      path: '', 
      component: ViewUserComponent 
      }, 
      { 
      path: 'edit', 
      component: EditUserComponent 
      } 
     ] 
     } 
    ] 
    } 
]; 

उपयोगकर्ता डेटा मार्ग /user/:uid के किसी भी बच्चों के लिए UserResolver के द्वारा प्राप्त कर रहे हैं। इस डेटा का उपयोग करके, उपयोगकर्ता प्रोफ़ाइल को /user/:uid पर नेविगेट करके देखा जा सकता है और फिर /user/:uid/edit पर नेविगेट करके संपादित किया जा सकता है। एक सफल संपादन पर, किसी को उपयोगकर्ता के पर प्रोफ़ाइल (/user/:uid) पर रीडायरेक्ट होने की उम्मीद होगी।

हालांकि, संकल्पित मार्ग के बच्चे होने के नाते दोनों दृश्य और संपादन पृष्ठ, एक से दूसरे में नेविगेट करते समय संकल्प ट्रिगर नहीं होता है।

नतीजतन, संपादन घटक से दृश्य घटक में वापस नेविगेट करते समय, प्रदर्शित डेटा अभी भी पुराना, अद्यतन नहीं है।

क्या संकल्पकर्ता को सर्वर से फिर से लाने के लिए हल करने के लिए संकल्प user डेटा को अमान्य करने का कोई तरीका होगा? या क्या इस तरह के परिणाम प्राप्त करने का कोई और तरीका है?

app डेटा अपरिवर्तित होने के कारण, हमें इसे पुनः लोड नहीं करना चाहिए।

+0

डेटा को संभालने के लिए मूल घटक के बजाय साझा सेवा का उपयोग करें। –

+0

@ हैरीनिन्ह मैं कर सकता था, लेकिन इसका मतलब होगा कि मार्ग परम की सदस्यता लेने वाले कोड को डुप्लिकेट करना और साझा सेवा में कैशिंग रणनीति को फिर से कार्यान्वित करते समय प्रत्येक बच्चों के घटक में सेवा को कॉल करना। ऐसा लगता है कि मार्ग संकल्प के उद्देश्य को हराने के लिए। – vlaurin

+0

विषय पर बहुत सारे और बहुत सारे खोज। जैसा कि मैं इसे संभालने का एकमात्र तरीका बता सकता हूं, एक घटना की सदस्यता लेना और डेटा को मैन्युअल रूप से पुनः लोड करना है। आदर्श रूप से, आप ऐप की संरचना करेंगे। ताकि आप कोड पुन: उपयोग के माध्यम से ऐसा कर सकें, लेकिन यह भी एक चुनौती है क्योंकि राउटर राज्य प्राप्त करने के कारण संकल्प का पुन: उपयोग करना मामूली नहीं है। मैंने अपने संकल्प के भीतर एक सार्वजनिक फ़ंक्शन बनाने का विकल्प चुना है जिसे पुन: उपयोग किया जा सकता है और संकल्प फ़ंक्शन को बाईपास कर सकता है। यह एक निश्चित क्षेत्र है जहां सुधार हो सकता है। मैंने इस तरह के मुद्दे वाले बहुत से लोगों को देखा है। –

उत्तर

3

एक पैरामीटर है जिसका उपयोग आप अपने रन कॉन्फ़िगरेशन में 'रनगार्ड एंड रेसोलॉवर' नामक कर सकते हैं जो रिज़ॉल्यूवर चलाते समय प्रभावित होगा। इस मामले में आप इसे 'हमेशा' पर सेट करना चाहते हैं। इसका मतलब यह है कि संकल्प किसी भी समय उस मार्ग के बच्चे के मार्ग बदलने के लिए चलाएगा। अधिक जानकारी के लिए the route documentation देखें।

5

मैंने समाधान 'runGuardsAndResolvers' का परीक्षण किया है, यह मेरे उपयोग के मामले के लिए काम करता है, प्रत्येक उप-पृष्ठ परिवर्तन में संकल्पक को बुलाया जाता है।

यह केवल इस विकल्प को आपके मार्गों का हिस्सा जोड़ रहा है जिसे आप इस तरह से व्यवहार करना चाहते हैं।

export const ROUTES: any = [ 
    { 
    path: 'project/:name', 
    runGuardsAndResolvers: "always", 
    component: ProjectComponent, 
    resolve: { project: ProjectResolver }, 
    children: [ 
     ... 
संबंधित मुद्दे