2013-05-16 8 views
7

मेरी पहली AngularJS अनुप्रयोग बना रहा है।AngularJS: पेज में आंशिक दृश्य लोड गतिशील

एनजी-दोहराना: एर लोड शीर्षक। प्रत्येक शीर्षक क्लिक करने योग्य है। एक शीर्षक पर क्लिक करते समय, एक AJAX-कॉल अधिक JSON डेटा प्राप्त कर रहा है। मुझे क्लिक किए गए शीर्षक के नीचे यह डेटा जोड़ना होगा।

सामान्य तरीके से, मैं एक स्ट्रिंग के रूप में एचटीएमएल बना सकते हैं और स्रोत कोड से संलग्न होगा। लेकिन चूंकि मैं AngularJS उपयोग कर रहा हूँ, वहाँ HTML और उस में एक और एनजी-दोहराने के साथ एक आंशिक दृश्य बनाने के लिए एक तरह से किया जाना चाहिए।

यह कैसे किया जा सकता है?

+2

कि अपने पृष्ठ में मार्ग के कार्यान्वयन के लिए एक अच्छा मैच की तरह लगता है। http://docs.angularjs.org/tutorial/step_07 और इस दस्तावेज़ प्रविष्टि: कोणीय की आधिकारिक ट्यूटोरियल के इस हिस्से पर एक नजर डालें http://docs.angularjs.org/api/ng.directive:ngView – mirrormx

+0

हाँ, यह सबसे अच्छा तरीका प्रतीत होता है। मैं पहली बार मार्गों का उपयोग न करने के बारे में सोच रहा था, लेकिन यह करेगा। एक बात जो मुझे समझ में नहीं आती है वह है: आप आंशिक दृश्य को किसी अन्य आंशिक दृश्य में "संलग्न" कैसे करते हैं? – user1121487

+1

'ng-include' निर्देश पर एक नज़र डालें: http://docs.angularjs.org/api/ng.directive:ng शामिल करें। इसके साथ आप आंशिक शामिल कर सकते हैं जिनमें उनमें 'एनजी-शामिल' भी हो सकता है - आंशिक भाग में आंशिक होना आदि। और आप आंशिक रूप से आंशिक स्रोत को बदल सकते हैं (स्ट्रिंग अक्षर के बजाय यूआरएल को कुछ ऑब्जेक्ट संदर्भ में सेट करके - यह मेरे द्वारा शामिल प्रलेखन प्रविष्टि के उदाहरण में दिखाया गया है)। – mirrormx

उत्तर

0

यहां एक छोटा उदाहरण है: आपका JSON बस प्रत्येक आइटम के json वस्तु में subItems सरणी के साथ संरचित है,।

जे एस:

function MyCtrl($scope, $http) { 
    $scope.items = [ {id: 'a', subItems: []}, {id: 'b', subItems: []} ]; 

    $scope.getSubItems = function(item) { 
    $http.get('/sub-items/' + item.id).then(function(response) { 
     //Append the response to the current list of subitems 
     //(incase some exist already) 
     item.subItems = item.subItems.concat(repsonse.data); 
    }); 
    }; 
} 

HTML:

<div ng-repeat="item in items"> 

    <a ng-click="getSubItems(item)">{{item.id}}</div> 
    <div ng-show="item.subItems.length"> 
    <h4>SubItems:</h4> 
    <ul> 
     <li ng-repeat="subItem in item.subItems">{{subItem}}</li> 
    </ul> 
    </div> 

</div> 
+1

धन्यवाद, यह एक अच्छा समाधान की तरह लगता है, लेकिन मैं जेनरेट किए गए एचटीएमएल की मात्रा को कम करने के लिए आंशिक विचारों का उपयोग करना पसंद करता हूं, ऐप में बेहतर संरचना भी करता हूं। हालांकि यह कुछ और समय आसान हो सकता है। – user1121487

+1

मैं ऐसा करने के लिए निर्देश का उपयोग करूंगा। – Nicolas2bert

2

मैं @Nicolas सुझाव के अनुसार एक निर्देश का प्रयोग करेंगे। इसे एंड्रयू ने सुझाव दिया कि आप इस तरह कुछ कर सकते हैं।

नियंत्रक:

.controller('MainCtrl', function ($scope, $http) { 
    $scope.items = [ 
     {id: 'a', subItems: []}, 
     {id: 'b', subItems: []} 
    ]; 

    $scope.getSubItems = function(id) { 
     $http.get('/sub-items/' + id) 
      .then(function() { 
       $scope.items.subItems = $scope.items.subItems.push(response.data); 
      }); 
    } 
}); 

दृश्य:

<div ng-repeat="item in items"> 
    <a ng-click="getSubItems(item)">{{item.id}}</a> 
    <list sub-items="item.subItems"></list> 
</div> 

निर्देशक:

.directive('list', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      subItems: '=subItems' 
     }, 
     template: '<ul>' + 
      '<li ng-repeat="subItem in subItems">{{subItem.id}}</li>' + 
      '</ul>' 
    }; 
}); 
संबंधित मुद्दे