2015-07-23 12 views
5

के साथ समस्या मेरे पास टेम्पलेट नामक निर्देश है, टेम्पलेट्स के लिए कोड नीचे जैसा है।कोणीय accordion scope

var templates = function($compile,$parse){ 
var directive = { 
    restrict: 'EA', 
    replace: true, 
    link: link 
}; 
return directive; 

function link(scope, element, attrs) { 
scope.name = "testName"; 
    var isHtmlCompiled = false; 
} 
}; 
angular.module('templateModules', []) 
.directive('templates', templates); 

यह मुख्य रूप से एचटीएमएल कोड संकलन और सवाल मैं उदाहरण में उस उद्देश्य के लिए इसे का उपयोग नहीं कर रहा हूँ की बेहतर समझ के लिए है.लेकिन प्रदर्शित करने के लिए प्रयोग किया जाता है। app.js फ़ाइल की तरह नीचे

angular.module('ui.bootstrap.demo', ['ui.bootstrap','templateModules']); 
angular.module('ui.bootstrap.demo').controller('AccordionDemoCtrl', function ($scope) { 
    $scope.oneAtATime = true; 

    $scope.groups = [ 
    { 
     title: 'Dynamic Group Header - 1', 
     content: 'Dynamic Group Body - 1' 
    }, 
    { 
     title: 'Dynamic Group Header - 2', 
     content: 'Dynamic Group Body - 2' 
    } 
    ]; 

    $scope.items = ['Item 1', 'Item 2', 'Item 3']; 

    $scope.addItem = function() { 
    var newItemNo = $scope.items.length + 1; 
    $scope.items.push('Item ' + newItemNo); 
    }; 

$scope.add = function(){ 
    alert($scope.name); 
} 

    $scope.status = { 
    isFirstOpen: true, 
    isFirstDisabled: false 
    }; 
}); 

index.html नीचे की तरह एक अकॉर्डियन उपयोग कर रहा है।

<!doctype html> 
<html ng-app="ui.bootstrap.demo"> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.js"></script> 
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.1.js"></script> 
    <script src="app.js"></script> 
     <script src="template.js"></script> 
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"> 
    </head> 
    <body> 

<div ng-controller="AccordionDemoCtrl"> 

    <accordion close-others="oneAtATime"> 
    <accordion-group heading="Static Header, initially expanded" is-open="status.isFirstOpen" is-disabled="status.isFirstDisabled"> 
     This content is straight in the template. 
    </accordion-group> 
    </accordion> 
    <accordion close-others="oneAtATime"> 
     <accordion-group heading="DYnamic" is-open="status.open" is-disabled="status.isFirstDisabled"> 
     <div templates="something"></div> 
    <button ng-click="add()">Add</button> 
    </accordion-group> 
    </accordion> 

</div> 
    </body> 
</html> 

समस्या का सामना करना पड़ रहा हूँ कि मैं AccordionDemoCtrl में टेम्पलेट से scope.name का मूल्य प्राप्त करने में सक्षम नहीं कर रहा हूँ है। AccordionDemoCtrl में उस मान को प्राप्त करने का कोई तरीका है?

+0

आपका कोड इस तरह के 'launch' की परिभाषा के रूप में, पूरा नहीं हुआ लगता है और * एक और निर्देश * ... आप इस समस्या को कम करने के लिए नीचे कोड हटना और JSFiddle पर डाल सकते हैं:

यहाँ एक काम डेमो है , आदि? – Joy

+0

मैंने प्रश्न – robin

उत्तर

2

आपको AccordionDemoCtrl से name संपत्ति तक पहुंचने में सक्षम होना चाहिए। चूंकि आपके निर्देश में scope: false है और लिंक फ़ंक्शन में scope.name सेट करें, बस सरलीकृत डेमो की तरह: JSFiddle

यहां आपके उदाहरण से संशोधित डेमो है: Plunker (दो-तरफा बाध्यकारी का उपयोग करके)।


स्पष्टीकरण

The directive accordion doesn't define scope है, इसलिए इसके दायरे से बाहर नियंत्रक से एक है। transclude:true कोणीय को template निर्देश के लिए एक बाल दायरा बनाता है। लेकिन चूंकि बाहरी नियंत्रक पर name एक प्राचीन प्रकार है, template के अंदर मान सेट करने से बच्चे के दायरे पर एक नया name बन जाएगा। कार्यशील डेमो देखें: JSFiddle। उदाहरण:

enter image description here

एक आदिम के बजाय एक वस्तु का उपयोग करते हैं, यह काम कर रहा है (JSFiddle)।

अधिक जानकारी के लिए: Understanding Scopes


यह two-way binding उपयोग करने के लिए निर्देश और बाहर नियंत्रक के बीच संवाद के लिए बेहतर लगता है। Plunker

+0

को संशोधित किया है मैंने आपके द्वारा बताए गए टेम्पलेट मॉड्यूल को शामिल करने के लिए app.js को संशोधित किया है। लेकिन यह अभी भी अपरिभाषित के रूप में दिख रहा है। समस्या निर्देश के चारों ओर accordion के साथ है। यह आपके उदाहरण की तरह काम करेगा। – robin

+0

लागू किए गए परिवर्तनों को दिखाने के लिए कोड संशोधित किया गया है, इस तरह, 'टेम्पलेट' के अंदर 'स्कोप' बिल्कुल 'accordion' पर है। यह देखने के लिए 'accordion' की परिभाषा की जांच करें कि इसका' स्कोप 'कहां से आता है। – Joy

+0

लेकिन फिर भी मैं इसे अपरिभाषित के रूप में प्राप्त कर रहा हूं। – robin

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