12

में एकाधिक नियंत्रक असाइन करें शायद यह उन्नत कोणीय उपयोगकर्ताओं के लिए एक आसान सवाल है, लेकिन मुझे यह समस्या कहीं अच्छी तरह से समझा नहीं गया।

तो मैं अपने कोड को पुनर्गठन कर रहा था, जब मुझे एहसास हुआ, मेरे पास एक दृश्य में दो नियंत्रक हैं, जो कोई समस्या नहीं है, जब नियंत्रक 'ACtrl' को $ राज्य द्वारा बाध्य किया जाता है प्रदाता और नियंत्रक 'BCtrl' दृश्य में बाध्य होता है एनजी-नियंत्रक द्वारा। लेकिन जब मैं इस तरह $ stateProvider में उन दोनों को आवंटित करने के लिए प्रयास करें:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: 'ACtrl', 
      controller: 'BCtrl' 
     } 
    } 
}); 

यह काम नहीं करेगा:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: 'ACtrl', 'BCtrl' 
     } 
    } 
}); 

या कि।

मुझे पता है कि यह नियंत्रकों की सामग्री को एक बनाने के लिए एक समाधान होगा, लेकिन नियंत्रक 'ACtrl' का उपयोग कहीं और भी किया जाता है, इसलिए मुझे कहीं और दोहराना होगा। मैं इस हल कर सकते हैं कैसे ...

उत्तर

15

Syntaxically, यह काम नहीं कर सकते हैं। यह (syntaxically) काम कर सकता था:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: ['ACtrl', 'BCtrl'] 
     } 
    } 
}); 

लेकिन AngularJS शून्य या DOMElement द्वारा एक नियंत्रक का उपयोग करें।

आप अपने A दृश्य के लिए CtrlA असाइन कर सकते हैं:

$stateProvider.state('a.view', { 
    url: "/anurl", 
    views: { 
     'menuContent': { 
      templateUrl: "anUrlToMyTemplates", 
      controller: 'ACtrl' 
     } 
    } 
}); 

और फिर में अपने A दृश्य:

<div data-ng-controller="BCtrl"> 
    <!-- your view content --> 
</div> 

जिसके अनुसार, कोड डिजाइन उद्देश्य के लिए, सही तरीका मर्ज करने के लिए है केवल दो में आपके दो नियंत्रकों के कार्यों को यदि उन्हें समान टेम्पलेट तत्वों को नियंत्रित करना है।

<!-- your view controlled by ACtrl configured in route provider --> 
<div> 
    <!-- your view content, part A --> 

    <div data-ng-controller="BCtrl"> 
     <!-- your view content, part B --> 
    </div> 
</div> 
+0

ठीक है, इस स्पष्टीकरण ने मुझे बहुत मदद की, मैं इसे अंतिम उत्तर – burnaDLX

+0

के रूप में स्वीकार करूँगा, इसलिए उत्तर को स्वीकार करने के लिए आप मेरी पोस्ट के बाईं ओर "चेक" प्रतीक पर क्लिक कर सकते हैं, यह हरा होगा उत्तर को स्वीकृत के रूप में चिह्नित करना। Additionnaly आप चेक आइकन के बगल में ऊपर तीर पर क्लिक कर सकते हैं। –

+0

ठीक है, मैंने सोचा कि मुझे तीर बनने के लिए आपकी टिप्पणी को ऊपर उठाना है (और मेरी प्रतिष्ठा ऐसा करने के लिए कम है ...)। – burnaDLX

9

अपने लेआउट विभाजित करें और की तरह कुछ का उपयोग करें:

.state('app.somestate', { 
      url : '/someurl', 
      views:{ 
       'menuContent': { 
        templateUrl: 'part1.html', 
        controller: 'ACtrl' 
       }, 
       'otherContent': { 
        templateUrl: 'part2.html', 
        controller: 'BCtrl' 
       }, 
       'someotherContent': { 
        templateUrl: 'part3.html', 
        controller: 'CCtrl' 
       } 
      } 
     }) 
+0

यह अलग एचटीएमएल भागों, THX के साथ अच्छा काम करता है: वे टेम्पलेट के विभिन्न भागों को नियंत्रित करते हैं, तो एक भाग के लिए एक नियंत्रक, या पूरे दृश्य के लिए एक नियंत्रक, और विशिष्ट भाग के लिए एक अन्य का उपयोग करें! – burnaDLX

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